]> andersk Git - moira.git/blobdiff - server/qvalidate.pc
fix the test in the [ANY] printserver case to actually work
[moira.git] / server / qvalidate.pc
index 2152c3f8a58284b6229747809eed947e8b195968..205646ec332224942d887143b686542fec57a1f7 100644 (file)
@@ -189,51 +189,34 @@ int validate_id(struct query *q, char *argv[], struct valobj *vo)
   namefield = vo->namefield;
   idfield = vo->idfield;
 
-  if ((tbl == USERS_TABLE && !strcmp(namefield, "login")) ||
-      tbl == MACHINE_TABLE || tbl == SUBNET_TABLE || tbl == FILESYS_TABLE ||
-      tbl == LIST_TABLE || tbl == CLUSTERS_TABLE || tbl == STRINGS_TABLE)
+  if (tbl == MACHINE_TABLE || tbl == SUBNET_TABLE)
     {
-      if (tbl == MACHINE_TABLE || tbl == SUBNET_TABLE)
-       {
-         for (c = name; *c; c++)
-           {
-             if (islower(*c))
-               *c = toupper(*c);
-           }
-       }
-      status = name_to_id(name, tbl, &id);
-      if (status == 0)
-       {
-         *(int *)argv[vo->index] = id;
-         return MR_EXISTS;
-       }
-      else if (status == MR_NO_MATCH && tbl == STRINGS_TABLE &&
-              (q->type == APPEND || q->type == UPDATE))
+      for (c = name; *c; c++)
        {
-         id = add_string(name);
-         cache_entry(name, STRINGS_TABLE, id);
-         *(int *)argv[vo->index] = id;
-         return MR_EXISTS;
+         if (islower(*c))
+           *c = toupper(*c);
        }
-      else if (status == MR_NO_MATCH || status == MR_NOT_UNIQUE)
-       return vo->error;
-      else
-       return status;
     }
-  else
+  status = name_to_id(name, tbl, &id);
+  if (status == 0)
     {
-      /* else, it's `dubu', which uses unix_uid from users */
-      EXEC SQL SELECT COUNT(*) INTO :rowcount FROM users
-       WHERE unix_uid = :name;
-      if (dbms_errno)
-       return mr_errcode;
-      if (rowcount != 1)
-       return vo->error;
-      EXEC SQL SELECT users_id INTO :id FROM users
-       WHERE unix_uid = :name;
       *(int *)argv[vo->index] = id;
       return MR_EXISTS;
     }
+  else if (status == MR_NO_MATCH && tbl == STRINGS_TABLE &&
+          (q->type == APPEND || q->type == UPDATE))
+    {
+      if (strlen(name) >= STRINGS_STRING_SIZE)
+       return MR_ARG_TOO_LONG;
+      id = add_string(name);
+      cache_entry(name, STRINGS_TABLE, id);
+      *(int *)argv[vo->index] = id;
+      return MR_EXISTS;
+    }
+  else if (status == MR_NO_MATCH || status == MR_NOT_UNIQUE)
+    return vo->error;
+  else
+    return status;
 }
 
 int validate_name(char *argv[], struct valobj *vo)
@@ -431,6 +414,8 @@ int validate_typedata(struct query *q, char *argv[], struct valobj *vo)
        {
          if (q->type != APPEND && q->type != UPDATE)
            return MR_STRING;
+         if (strlen(name) >= STRINGS_STRING_SIZE)
+           return MR_ARG_TOO_LONG;
          id = add_string(name);
          cache_entry(name, STRINGS_TABLE, id);
        }
@@ -482,6 +467,9 @@ int validate_num(char *argv[], struct valobj *vo)
 
   if (*p == '-')
     p++;
+  if (!*p)
+    return MR_INTEGER;
+
   for (; *p; p++)
     {
       if (*p < '0' || *p > '9')
This page took 0.04705 seconds and 4 git commands to generate.