Network Block Device @PACKAGE_VERSION@
Defines | Functions

nbdsrv.c File Reference

#include "config.h"
#include "nbd-debug.h"
#include <nbdsrv.h>
#include <assert.h>
#include <ctype.h>
#include <netdb.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <syslog.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <treefiles.h>
#include "backend.h"
#include <sys/mount.h>
#include <cliserv.h>

Go to the source code of this file.

Defines

#define LINELEN   256
 Size of static buffer used to read the authorization file (yuck)

Functions

bool address_matches (const char *mask, const struct sockaddr *addr, GError **err)
 Check whether a given address matches a given netmask.
uint8_t getmaskbyte (int masklen)
 Gets a byte to allow for address masking.
int authorized_client (CLIENT *opts)
 Check whether a client is allowed to connect.
SERVERdup_serve (const SERVER *const s)
 duplicate server
uint64_t size_autodetect (int fhandle)
 Detect the size of a file.
int exptrim (struct nbd_request *req, CLIENT *client)
 Punch a hole in the backend file (if supported by the current system).
void myseek (int handle, off_t a)
 seek to a position in a file, with error handling.

Define Documentation

#define LINELEN   256

Size of static buffer used to read the authorization file (yuck)

Definition at line 24 of file nbdsrv.c.

Referenced by authorized_client().


Function Documentation

bool address_matches ( const char *  mask,
const struct sockaddr *  addr,
GError **  err 
)

Check whether a given address matches a given netmask.

Parameters:
maskthe address or netmask to check against, in ASCII representation
addrthe address to check
Returns:
true if the address matches the mask, false otherwise; in case of failure to parse netmask, returns false with err set appropriately.
Todo:
decide what to do with v6-mapped IPv4 addresses.

Definition at line 29 of file nbdsrv.c.

References getmaskbyte(), NBDS_ERR, and NBDS_ERR_GAI.

Referenced by authorized_client().

int authorized_client ( CLIENT opts)

Check whether a client is allowed to connect.

Works with an authorization file which contains one line per machine or network, with CIDR-style netmasks.

Parameters:
optsThe client who's trying to connect.
Returns:
0 - authorization refused, 1 - OK

Definition at line 113 of file nbdsrv.c.

References address_matches(), SERVER::authname, CLIENT::clientaddr, LINELEN, msg, and CLIENT::server.

Referenced by handle_modern_connection().

SERVER* dup_serve ( const SERVER *const  s)

duplicate server

Parameters:
sthe old server we want to duplicate
Returns:
new duplicated server

Definition at line 157 of file nbdsrv.c.

References SERVER::authname, SERVER::cidrlen, SERVER::cowdir, SERVER::expected_size, SERVER::exportname, SERVER::flags, SERVER::listenaddr, SERVER::max_connections, SERVER::postrun, SERVER::prerun, SERVER::servename, SERVER::transactionlog, and SERVER::virtstyle.

int exptrim ( struct nbd_request req,
CLIENT client 
)

Punch a hole in the backend file (if supported by the current system).

Parameters:
reqthe request for which this is being processed
clientthe client for which we're processing this request

Definition at line 240 of file nbdsrv.c.

References DEBUG, delete_treefile(), CLIENT::export, CLIENT::exportname, CLIENT::exportsize, F_COPYONWRITE, F_READONLY, F_TREEFILES, FILE_INFO::fhandle, SERVER::flags, nbd_request::from, nbd_request::len, punch_hole(), CLIENT::server, FILE_INFO::startoff, and TREEPAGESIZE.

Referenced by handle_trim(), and mainloop().

uint8_t getmaskbyte ( int  masklen)

Gets a byte to allow for address masking.

Parameters:
masklenthe length of the requested mask.
Returns:
if the length of the mask is 8 or longer, 0xFF. Otherwise, a byte with `masklen' number of leading bits set to 1, everything else set to 0.

Definition at line 101 of file nbdsrv.c.

Referenced by address_matches(), and set_peername().

void myseek ( int  handle,
off_t  a 
)

seek to a position in a file, with error handling.

Parameters:
handlea filedescriptor
aposition to seek to
Todo:
get rid of this.

Definition at line 292 of file nbdsrv.c.

References err().

Referenced by expread(), expwrite(), and open_treefile().

uint64_t size_autodetect ( int  fhandle)

Detect the size of a file.

Parameters:
fhandleAn open filedescriptor
Returns:
the size of the file, or UINT64_MAX if detection was impossible.

Definition at line 199 of file nbdsrv.c.

References __attribute__, and DEBUG.

Referenced by setupexport().