r326: Don't require read-write access to base file when doing copy on write
[nbd.git] / nbd-server.c
index 527ed60..315d44e 100644 (file)
@@ -1220,8 +1220,12 @@ void setupexport(CLIENT* client) {
                        /* Try again because maybe media was read-only */
                        fi.fhandle = open(tmpname, O_RDONLY);
                        if(fi.fhandle != -1) {
-                               client->server->flags |= F_AUTOREADONLY;
-                               client->server->flags |= F_READONLY;
+                               /* Opening the base file in copyonwrite mode is
+                                * okay */
+                               if(!(client->server->flags & F_COPYONWRITE)) {
+                                       client->server->flags |= F_AUTOREADONLY;
+                                       client->server->flags |= F_READONLY;
+                               }
                        }
                }
                if(fi.fhandle == -1) {
@@ -1393,7 +1397,6 @@ int serveloop(GArray* servers) {
        int sock;
        fd_set mset;
        fd_set rset;
-       struct timeval tv;
 
        /* 
         * Set up the master fd_set. The set of descriptors we need
@@ -1415,9 +1418,7 @@ int serveloop(GArray* servers) {
                pid_t *pid;
 
                memcpy(&rset, &mset, sizeof(fd_set));
-               tv.tv_sec=0;
-               tv.tv_usec=500;
-               if(select(max+1, &rset, NULL, NULL, &tv)>0) {
+               if(select(max+1, &rset, NULL, NULL, NULL)>0) {
                        DEBUG("accept, ");
                        for(i=0;i<servers->len;i++) {
                                serve=&(g_array_index(servers, SERVER, i));
@@ -1451,7 +1452,7 @@ int serveloop(GArray* servers) {
                                        /* child */
                                        g_hash_table_destroy(children);
                                        for(i=0;i<servers->len;i++) {
-                                               serve=g_array_index(servers, SERVER*, i);
+                                               serve=&g_array_index(servers, SERVER, i);
                                                close(serve->socket);
                                        }
                                        /* FALSE does not free the
@@ -1571,9 +1572,9 @@ void daemonize(SERVER* serve) {
        }
        if(!*pidftemplate) {
                if(serve) {
-                       strncpy(pidftemplate, "/var/run/server.%d.pid", 255);
+                       strncpy(pidftemplate, "/var/run/nbd-server.%d.pid", 255);
                } else {
-                       strncpy(pidftemplate, "/var/run/server.pid", 255);
+                       strncpy(pidftemplate, "/var/run/nbd-server.pid", 255);
                }
        }
        snprintf(pidfname, 255, pidftemplate, serve ? serve->port : 0);