X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fnfsdcld%2Fnfsdcld.c;h=c58801c4675d5a739cf2b6233f4e0d3bcdf9a970;hp=9fab2c301ade880896ca1cca9817cc1a9c9e700c;hb=3e859abefffafd8718b5f1f76da7b129fc18e281;hpb=dfebe7f4f25a12b615195f339192fa8837d9b5c9 diff --git a/utils/nfsdcld/nfsdcld.c b/utils/nfsdcld/nfsdcld.c index 9fab2c3..c58801c 100644 --- a/utils/nfsdcld/nfsdcld.c +++ b/utils/nfsdcld/nfsdcld.c @@ -61,6 +61,7 @@ static struct option longopts[] = { "foreground", 0, NULL, 'F' }, { "debug", 0, NULL, 'd' }, { "pipe", 1, NULL, 'p' }, + { "storagedir", 1, NULL, 's' }, { NULL, 0, 0, 0 }, }; @@ -70,7 +71,7 @@ static void cldcb(int UNUSED(fd), short which, void *data); static void usage(char *progname) { - printf("Usage: %s [ -hFd ] [ -p pipe ]\n", progname); + printf("%s [ -hFd ] [ -p pipe ] [ -s dir ]\n", progname); } static int @@ -144,15 +145,16 @@ cld_create(struct cld_client *clnt) ssize_t bsize, wsize; struct cld_msg *cmsg = &clnt->cl_msg; - xlog(D_GENERAL, "%s: create client record", __func__); + xlog(D_GENERAL, "%s: create client record.", __func__); - /* FIXME: create client record on storage here */ + ret = sqlite_insert_client(cmsg->cm_u.cm_name.cn_id, + cmsg->cm_u.cm_name.cn_len); - /* set up reply */ - cmsg->cm_status = 0; + cmsg->cm_status = ret ? -EREMOTEIO : ret; bsize = sizeof(*cmsg); + xlog(D_GENERAL, "Doing downcall with status %d", cmsg->cm_status); wsize = atomicio((void *)write, clnt->cl_fd, cmsg, bsize); if (wsize != bsize) { xlog(L_ERROR, "%s: problem writing to cld pipe (%ld): %m", @@ -210,6 +212,7 @@ main(int argc, char **argv) int rc = 0; bool foreground = false; char *progname; + char *storagedir = NULL; struct cld_client clnt; memset(&clnt, 0, sizeof(clnt)); @@ -225,7 +228,7 @@ main(int argc, char **argv) xlog_stderr(1); /* process command-line options */ - while ((arg = getopt_long(argc, argv, "hdFp:", longopts, + while ((arg = getopt_long(argc, argv, "hdFp:s:", longopts, NULL)) != EOF) { switch (arg) { case 'd': @@ -237,6 +240,9 @@ main(int argc, char **argv) case 'p': pipepath = optarg; break; + case 's': + storagedir = optarg; + break; default: usage(progname); return 0; @@ -256,6 +262,11 @@ main(int argc, char **argv) } /* set up storage db */ + rc = sqlite_maindb_init(storagedir); + if (rc) { + xlog(L_ERROR, "Failed to open main database: %d", rc); + goto out; + } /* set up event handler */ rc = cld_pipe_init(&clnt);