]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/ua_input.c
Server address binding + bscan updates -- see kes25Sep02
[bacula/bacula] / bacula / src / dird / ua_input.c
index 9a9382d3d03b542823d2703861faedec876f3f06..5ad9ae53694069a6ec90a64e73aa32d43cadd7a1 100644 (file)
@@ -48,7 +48,7 @@ int get_cmd(UAContext *ua, char *prompt)
    bnet_fsend(sock, "%s", prompt);
    bnet_sig(sock, BNET_PROMPT);       /* request more input */
    for ( ;; ) {
-      if (bnet_recv(sock) < 0) {
+      if (bnet_recv(sock) <= 0) {
         return 0;
       }
       ua->cmd = check_pool_memory_size(ua->cmd, sock->msglen+1);
@@ -131,7 +131,7 @@ char *next_arg(char **s)
 
 void parse_command_args(UAContext *ua)
 {
-   char *p, *n;
+   char *p, *q, *n;
    int i, len;
 
    len = strlen(ua->cmd) + 1;
@@ -154,6 +154,22 @@ void parse_command_args(UAContext *ua)
       p = strchr(ua->argk[i], '=');
       if (p) {
         *p++ = 0;                    /* terminate keyword and point to value */
+        /* Unquote quoted values */
+         if (*p == '"') {
+            Dmsg0(400, "Start with quote.\n");
+            for (n = q = ++p; *p && *p != '"'; ) {
+               if (*p == '\\') {
+                 p++;
+              }
+              *q++ = *p++;
+           }
+           p++;                            /* skip terminating quote */
+            for ( ; *p && *p != ' '; ) {
+              *q++ = *p++;
+           }
+           *q = 0;
+           p = n;
+        }
         if (strlen(p) > MAX_NAME_LENGTH-1) {
            p[MAX_NAME_LENGTH-1] = 0; /* truncate to max len */
         }