]> andersk Git - moira.git/commitdiff
Add validation of numeric query arguments
authordanw <danw>
Wed, 1 Oct 1997 22:30:26 +0000 (22:30 +0000)
committerdanw <danw>
Wed, 1 Oct 1997 22:30:26 +0000 (22:30 +0000)
(and fix a handful of other validation bogons I noticed along the way)

server/queries2.c
server/query.h
server/qvalidate.pc

index d5454418d3e7c1b1392e7562f8b470a19e4193f6..2244f358a66e56fb66985b2075d194d1b52468f7 100644 (file)
@@ -354,10 +354,14 @@ static char *gubu_fields[] = {
   MIT_ID, CLASS, MOD1, MOD2, MOD3,
 };
 
+static struct valobj gubu_valobj[] = {
+  {V_NUM, 0}
+};
+
 static struct validate gubu_validate = 
 {
-  0,
-  0,
+  gubu_valobj,
+  1,
   0,
   0,
   0,
@@ -424,18 +428,21 @@ static char *auac_fields[] = {
 static struct valobj auac_valobj[] = {
   {V_LOCK, 0, USERS_TABLE, 0, USERS_ID, MR_DEADLOCK},
   {V_CHAR, 0, USERS_TABLE, LOGIN},
+  {V_NUM, 1},
   {V_CHAR, 2, USERS_TABLE, SHELL},
   {V_CHAR, 3, USERS_TABLE, LAST},
   {V_CHAR, 4, USERS_TABLE, FIRST},
   {V_CHAR, 5, USERS_TABLE, MIDDLE},
+  {V_NUM, 6},
   {V_CHAR, 7, USERS_TABLE, MIT_ID},
   {V_TYPE, 8, 0, CLASS, 0, MR_BAD_CLASS},
   {V_ID, 9, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
+  {V_NUM, 10}
 };
 
 static struct validate auac_validate = {
   auac_valobj,
-  9,
+  12,
   LOGIN,
   "login = '%s'",
   1,
@@ -447,7 +454,7 @@ static struct validate auac_validate = {
 
 static struct validate ausr_validate = {
   auac_valobj,
-  8,
+  10,
   LOGIN,
   "login = '%s'",
   1,
@@ -470,11 +477,14 @@ static struct valobj rusr_valobj[] = {
   {V_LOCK, 0, NFSPHYS_TABLE, 0, "nfsphys_id", MR_DEADLOCK},
   {V_LOCK, 0, QUOTA_TABLE,0, FILSYS_ID, MR_DEADLOCK},
   {V_RLOCK,0, SERVERHOSTS_TABLE,0, MACH_ID, MR_DEADLOCK},
+  {V_NUM, 0},
+  {V_CHAR, 1},
+  {V_NUM, 2},
 };
 
 static struct validate rusr_validate = {
   rusr_valobj,
-  8,
+  11,
   0,
   0,
   0,
@@ -494,18 +504,21 @@ static struct valobj uuac_valobj[] = {
   {V_LOCK, 0, USERS_TABLE, 0, USERS_ID, MR_DEADLOCK},
   {V_ID, 0, USERS_TABLE, LOGIN, USERS_ID, MR_USER},
   {V_RENAME, 1, USERS_TABLE, LOGIN, USERS_ID, MR_NOT_UNIQUE},
+  {V_NUM, 2},
   {V_CHAR, 3, USERS_TABLE, SHELL},
   {V_CHAR, 4, USERS_TABLE, FIRST},
   {V_CHAR, 5, USERS_TABLE, LAST},
   {V_CHAR, 6, USERS_TABLE, MIDDLE},
+  {V_NUM, 7},
   {V_CHAR, 8, USERS_TABLE, MIT_ID},
   {V_TYPE, 9, 0, CLASS, 0, MR_BAD_CLASS},
   {V_ID, 10, STRINGS_TABLE, "string", "string_id", MR_NO_MATCH},
+  {V_NUM, 12},
 };
 
 static struct validate uuac_validate = {
   uuac_valobj,
-  10,
+  13,
   0,
   0,
   0,
@@ -517,7 +530,7 @@ static struct validate uuac_validate = {
 
 static struct validate uusr_validate = {
   uuac_valobj,
-  10,
+  12,
   0,
   0,
   0,
@@ -560,9 +573,16 @@ static char *uuss_fields[] = {
   SECURE,
 };
 
+static struct valobj uust_valobj[] = {
+  {V_LOCK, 0, USERS_TABLE, 0, USERS_ID, MR_DEADLOCK},
+  {V_ID, 0, USERS_TABLE, LOGIN, USERS_ID, MR_USER},
+  {V_NUM, 1},
+  {V_NUM, 2},
+};
+
 static struct validate uust_validate = {
-  VOuser0lock,
-  2,
+  uust_valobj,
+  3,
   0,
   0,
   0,
@@ -578,8 +598,8 @@ static char *uudf_fields[] = {
 };
 
 static struct validate uudf_validate = {
-  VOuser0lock,
-  2,
+  uust_valobj,
+  4,
   0,
   0,
   0,
@@ -855,17 +875,19 @@ static char *ahst_fields[] = {
 };
 
 static struct valobj ahst_valobj[] = {
+  {V_RLOCK,0, USERS_TABLE, 0, USERS_ID, MR_DEADLOCK},
+  {V_LOCK, 0, MACHINE_TABLE, 0, MACH_ID, MR_DEADLOCK},
+  {V_RLOCK, 0, SUBNET_TABLE, 0, SNET_ID, MR_DEADLOCK},
+  {V_RLOCK, 0, LIST_TABLE, 0, LIST_ID, MR_DEADLOCK},
+  {V_RLOCK, 0, HOSTALIAS_TABLE, 0, MACH_ID, MR_DEADLOCK},
   {V_CHAR, 0, MACHINE_TABLE, NAME},
   {V_CHAR, 1, MACHINE_TABLE, "vendor"},
   {V_CHAR, 2, MACHINE_TABLE, "model"},
   {V_CHAR, 3, MACHINE_TABLE, "os"},
   {V_CHAR, 4, MACHINE_TABLE, "location"},
   {V_CHAR, 5, MACHINE_TABLE, "contact"},
-  {V_RLOCK,0, USERS_TABLE, 0, USERS_ID, MR_DEADLOCK},
-  {V_LOCK, 0, MACHINE_TABLE, 0, MACH_ID, MR_DEADLOCK},
-  {V_RLOCK, 0, SUBNET_TABLE, 0, SNET_ID, MR_DEADLOCK},
-  {V_RLOCK, 0, LIST_TABLE, 0, LIST_ID, MR_DEADLOCK},
-  {V_RLOCK, 0, HOSTALIAS_TABLE, 0, MACH_ID, MR_DEADLOCK},
+  {V_NUM, 6},
+  {V_NUM, 7},
   {V_ID, 8, SUBNET_TABLE, NAME, SNET_ID, MR_SUBNET},
   {V_TYPE, 10, 0, ACE_TYPE, 0, MR_ACE},
   {V_TYPEDATA, 11, 0, 0, 0, MR_ACE},
@@ -875,7 +897,7 @@ static struct valobj ahst_valobj[] = {
 
 static struct validate ahst_validate = {
   ahst_valobj,
-  16,
+  18,
   NAME,
   "name = UPPER('%s')",
   1,
@@ -902,6 +924,9 @@ static struct valobj uhst_valobj[] = {
   {V_CHAR, 3, MACHINE_TABLE, "model"},
   {V_CHAR, 4, MACHINE_TABLE, "os"},
   {V_CHAR, 5, MACHINE_TABLE, "location"},
+  {V_CHAR, 6, MACHINE_TABLE, "contact"},
+  {V_NUM, 7},
+  {V_NUM, 8},
   {V_ID, 9, SUBNET_TABLE, NAME, SNET_ID, MR_SUBNET},
   {V_TYPE, 11, 0, ACE_TYPE, 0, MR_ACE},
   {V_TYPEDATA, 12, 0, 0, 0, MR_ACE},
@@ -911,7 +936,7 @@ static struct valobj uhst_valobj[] = {
 
 static struct validate uhst_validate = {
   uhst_valobj,
-  16,
+  19,
   0,
   0,
   0,
@@ -1043,6 +1068,10 @@ static struct valobj asnt_valobj[] = {
   {V_RLOCK, 0, LIST_TABLE, 0, LIST_ID, MR_DEADLOCK},
   {V_CHAR, 0, SUBNET_TABLE, NAME},
   {V_LEN, 1, SUBNET_TABLE, DESC},
+  {V_NUM, 2},
+  {V_NUM, 3},
+  {V_NUM, 4},
+  {V_NUM, 5},
   {V_LEN, 6, SUBNET_TABLE, "prefix"},
   {V_TYPE, 7, 0, ACE_TYPE, 0, MR_ACE},
   {V_TYPEDATA, 8, 0, 0, 0, MR_ACE},
@@ -1051,7 +1080,7 @@ static struct valobj asnt_valobj[] = {
 static struct validate asnt_validate = 
 {
     asnt_valobj,
-    8,
+    12,
     NAME,
     "name = UPPER('%s')",
     1,
@@ -1073,6 +1102,10 @@ static struct valobj usnt_valobj[] = {
   {V_ID, 0, SUBNET_TABLE, NAME, SNET_ID, MR_NO_MATCH},
   {V_RENAME, 1, SUBNET_TABLE, NAME, SNET_ID, MR_NOT_UNIQUE},
   {V_LEN, 2, SUBNET_TABLE, DESC},
+  {V_NUM, 3},
+  {V_NUM, 4},
+  {V_NUM, 5},
+  {V_NUM, 6},
   {V_LEN, 7, SUBNET_TABLE, "prefix"},
   {V_TYPE, 8, 0, ACE_TYPE, 0, MR_ACE},
   {V_TYPEDATA, 9, 0, 0, 0, MR_ACE},
@@ -1081,7 +1114,7 @@ static struct valobj usnt_valobj[] = {
 static struct validate usnt_validate = 
 {
     usnt_valobj,
-    9,
+    13,
     NAME,
     "snet_id = %d",
     1,
@@ -1289,6 +1322,12 @@ static struct valobj alis_valobj[] = {
   {V_RLOCK, 0, USERS_TABLE, 0, USERS_ID, MR_DEADLOCK},
   {V_LOCK, 0, LIST_TABLE, 0, LIST_ID, MR_DEADLOCK},
   {V_CHAR, 0, LIST_TABLE, NAME},
+  {V_NUM, 1},
+  {V_NUM, 2},
+  {V_NUM, 3},
+  {V_NUM, 4},
+  {V_NUM, 5},
+  {V_NUM, 6},
   {V_TYPE, 7, 0, ACE_TYPE, 0, MR_ACE},
   {V_TYPEDATA, 8, 0, 0, LIST_ID, MR_ACE},
   {V_LEN, 9, LIST_TABLE, DESC},
@@ -1296,7 +1335,7 @@ static struct valobj alis_valobj[] = {
 
 static struct validate alis_validate = {
   alis_valobj,
-  6,
+  12,
   NAME,
   "name = '%s'",
   1,
@@ -1317,14 +1356,20 @@ static struct valobj ulis_valobj[] = {
   {V_LOCK, 0, LIST_TABLE, 0, LIST_ID, MR_DEADLOCK},
   {V_ID, 0, LIST_TABLE, NAME, LIST_ID, MR_LIST},
   {V_RENAME, 1, LIST_TABLE, NAME, LIST_ID, MR_NOT_UNIQUE},
+  {V_NUM, 2},
+  {V_NUM, 3},
+  {V_NUM, 4},
+  {V_NUM, 5},
+  {V_NUM, 6},
+  {V_NUM, 7},
+  {V_TYPE, 8, 0, ACE_TYPE, 0, MR_ACE},
   {V_TYPEDATA, 9, 0, 0, LIST_ID, MR_ACE},
-  {V_CHAR, 1, LIST_TABLE, NAME},
   {V_LEN, 10, LIST_TABLE, DESC},
 };
 
 static struct validate ulis_validate = {
   ulis_valobj,
-  7,
+  13,
   NAME,
   "list_id = %d",
   1,
@@ -1588,9 +1633,11 @@ static struct valobj asin_valobj[] = {
   {V_LOCK, 0, MACHINE_TABLE, 0, MACH_ID, MR_DEADLOCK},
   {V_RLOCK, 0, LIST_TABLE, 0, LIST_ID, MR_DEADLOCK},
   {V_CHAR, 0, SERVERS_TABLE, NAME},
+  {V_NUM, 1},
   {V_LEN, 2, SERVERS_TABLE, "target_file"},
   {V_LEN, 3, SERVERS_TABLE, "script"},
   {V_TYPE, 4, 0, "service", 0, MR_TYPE},
+  {V_NUM, 5},
   {V_TYPE, 6, 0, ACE_TYPE, 0, MR_ACE},
   {V_TYPEDATA, 7, 0, 0, 0, MR_ACE},
 };
@@ -1598,7 +1645,7 @@ static struct valobj asin_valobj[] = {
 static struct validate asin_validate = /* for asin, usin */
 {
   asin_valobj,
-  9,
+  11,
   NAME,
   "name = UPPER('%s')",
   1,
@@ -1628,12 +1675,16 @@ static struct valobj ssif_valobj[] = {
   {V_RLOCK, 0, USERS_TABLE, 0, USERS_ID, MR_DEADLOCK},
   {V_LOCK, 0, MACHINE_TABLE, 0, MACH_ID, MR_DEADLOCK},
   {V_RLOCK, 0, LIST_TABLE, 0, LIST_ID, MR_DEADLOCK},
+  {V_NUM, 1},
+  {V_NUM, 2},
+  {V_NUM, 3},
+  {V_NUM, 4},
   {V_LEN, 5, SERVERS_TABLE, "errmsg"},
 };
 
 static struct validate ssif_validate = {
   ssif_valobj,
-  4,
+  8,
   NAME,
   "name = UPPER('%s')",
   1,
@@ -1716,15 +1767,18 @@ static struct valobj ashi_valobj[] = {
   {V_LOCK, 0, MACHINE_TABLE, 0, MACH_ID, MR_DEADLOCK},
   {V_NAME, 0, SERVERS_TABLE, NAME, 0, MR_SERVICE},
   {V_LOCK, 0, SERVERHOSTS_TABLE,0, MACH_ID, MR_DEADLOCK},
-  {V_ID, 1, MACHINE_TABLE, NAME, MACH_ID, MR_MACHINE},
   {V_CHAR, 0, SERVERHOSTS_TABLE, NAME},
+  {V_ID, 1, MACHINE_TABLE, NAME, MACH_ID, MR_MACHINE},
+  {V_NUM, 2},
+  {V_NUM, 3},
+  {V_NUM, 4},
   {V_LEN, 5, SERVERHOSTS_TABLE, "value3"},
 };
 
 static struct validate ashi_validate = /* ashi & ushi */
 {
   ashi_valobj,
-  6,
+  9,
   SERVICE,
   "service = UPPER('%s') AND mach_id = %d",
   2,
@@ -1737,7 +1791,7 @@ static struct validate ashi_validate = /* ashi & ushi */
 static struct validate rshe_validate = 
 {
   ashi_valobj,
-  4,
+  5,
   SERVICE,
   "service = UPPER('%s') AND mach_id = %d",
   2,
@@ -1750,7 +1804,7 @@ static struct validate rshe_validate =
 static struct validate ssho_validate = 
 {
   ashi_valobj,
-  4,
+  5,
   SERVICE,
   "service = UPPER('%s') AND mach_id = %d",
   2,
@@ -1768,14 +1822,20 @@ static char *sshi_fields[] = {
 static struct valobj sshi_valobj[] = {
   {V_RLOCK, 0, MACHINE_TABLE, 0, MACH_ID, MR_DEADLOCK},
   {V_NAME, 0, SERVERS_TABLE, NAME, 0, MR_SERVICE},
-  {V_ID, 1, MACHINE_TABLE, NAME, MACH_ID, MR_MACHINE},  /** Was this ok to add? */
-  {V_LEN, 5, SERVERS_TABLE, "errmsg"},
+  {V_ID, 1, MACHINE_TABLE, NAME, MACH_ID, MR_MACHINE},
+  {V_NUM, 2},
+  {V_NUM, 3},
+  {V_NUM, 4},
+  {V_NUM, 5},
+  {V_LEN, 6, SERVERS_TABLE, "errmsg"},
+  {V_NUM, 7},
+  {V_NUM, 8},
 };
 
 static struct validate sshi_validate = 
 {
   sshi_valobj,
-  4,
+  10,
   0,
   0,
   0,
@@ -1792,7 +1852,7 @@ static char *dshi_fields[] = {
 static struct validate dshi_validate = 
 {
   ashi_valobj,
-  4,
+  5,
   SERVICE,
   "service = UPPER('%s') AND mach_id = %d",
   2,
@@ -1905,15 +1965,17 @@ static struct valobj afil_valobj[] = {
   {V_ID, 2, MACHINE_TABLE, NAME, MACH_ID, MR_MACHINE},
   {V_CHAR, 3, FILESYS_TABLE, NAME},
   {V_LEN, 4, FILESYS_TABLE, "mount"},
+  {V_LEN, 5, FILESYS_TABLE, "rwaccess"},
   {V_LEN, 6, FILESYS_TABLE, COMMENTS},
   {V_ID, 7, USERS_TABLE, LOGIN, USERS_ID, MR_USER},
   {V_ID, 8, LIST_TABLE, NAME, LIST_ID, MR_LIST},
+  {V_NUM, 9},
   {V_TYPE, 10, 0, "lockertype", 0, MR_TYPE},
 };
 
 static struct validate afil_validate = {
   afil_valobj,
-  13,
+  15,
   LABEL,
   "label = '%s'",
   1,
@@ -1940,15 +2002,17 @@ static struct valobj ufil_valobj[] = {
   {V_ID, 3, MACHINE_TABLE, NAME, MACH_ID, MR_MACHINE},
   {V_CHAR, 4, FILESYS_TABLE, NAME},
   {V_LEN, 5, FILESYS_TABLE, "mount"},
+  {V_LEN, 6, FILESYS_TABLE, "rwaccess"},
   {V_LEN, 7, FILESYS_TABLE, COMMENTS},
   {V_ID, 8, USERS_TABLE, LOGIN, USERS_ID, MR_USER},
   {V_ID, 9, LIST_TABLE, NAME, LIST_ID, MR_LIST},
+  {V_NUM, 10},
   {V_TYPE, 11, 0, "lockertype", 0, MR_TYPE},
 };
 
 static struct validate ufil_validate = {
   ufil_valobj,
-  15,
+  17,
   LABEL,
   "filsys_id = %d",
   1,
@@ -2054,11 +2118,14 @@ static struct valobj anfp_valobj[] = {
   {V_ID, 0, MACHINE_TABLE, NAME, MACH_ID, MR_MACHINE},
   {V_CHAR, 1, NFSPHYS_TABLE, "dir"},
   {V_LEN, 2, NFSPHYS_TABLE, "device"},
+  {V_NUM, 3},
+  {V_NUM, 4},
+  {V_NUM, 5},
 };
 
 static struct validate anfp_validate = {
   anfp_valobj,
-  5,
+  8,
   DIR,
   "mach_id = %d and dir = '%s'",
   2,
@@ -2070,7 +2137,7 @@ static struct validate anfp_validate = {
 
 static struct validate unfp_validate = {
   anfp_valobj,
-  5,
+  8,
   DIR,
   "mach_id = %d and dir = '%s'",
   2,
@@ -2084,6 +2151,26 @@ static char *ajnf_fields[] = {
   MACHINE, DIR, "adjustment",
 };
 
+static struct valobj ajnf_valobj[] = {
+  {V_RLOCK, 0, MACHINE_TABLE, 0, MACH_ID, MR_DEADLOCK},
+  {V_LOCK, 0, NFSPHYS_TABLE, 0, "nfsphys_id", MR_DEADLOCK},
+  {V_ID, 0, MACHINE_TABLE, NAME, MACH_ID, MR_MACHINE},
+  {V_CHAR, 1, NFSPHYS_TABLE, "dir"},
+  {V_NUM, 2},
+};
+
+static struct validate ajnf_validate = {
+  ajnf_valobj,
+  5,
+  DIR,
+  "mach_id = %d and dir = '%s'",
+  2,
+  "nfsphys_id",
+  0,
+  0,
+  set_nfsphys_modtime,
+};
+
 static char *dnfp_fields[] = {
   MACHINE, DIR,
 };
@@ -2093,7 +2180,6 @@ static struct valobj dnfp_valobj[] = {
   {V_LOCK, 0, MACHINE_TABLE, 0, MACH_ID, MR_DEADLOCK},
   {V_LOCK, 0, NFSPHYS_TABLE, 0, "nfsphys_id", MR_DEADLOCK},
   {V_ID, 0, MACHINE_TABLE, NAME, MACH_ID, MR_MACHINE},
-
 };
 
 static struct validate dnfp_validate = {
@@ -2166,11 +2252,12 @@ static struct valobj aqot_valobj[] = {
   {V_ID, 0, FILESYS_TABLE, LABEL, FILSYS_ID, MR_FILESYS},
   {V_TYPE, 1, 0, QUOTA_TYPE, 0, MR_TYPE},
   {V_TYPEDATA, 2, 0, 0, 0, MR_ACE},
+  {V_NUM, 3},
 };
 
 static struct validate aqot_validate = {
   aqot_valobj,
-  8,
+  9,
   FILSYS_ID,
   "filsys_id = %d and type = '%s' and entity_id = %d",
   3,
@@ -2182,7 +2269,7 @@ static struct validate aqot_validate = {
 
 static struct validate uqot_validate = {
   aqot_valobj,
-  8,
+  9,
   FILSYS_ID,
   "filsys_id = %d AND type = '%s' AND entity_id = %d",
   3,
@@ -2237,9 +2324,16 @@ static char *anfq_fields[] = {
   FILESYS, LOGIN, QUOTA,
 };
 
+static struct valobj anfq_valobj[] = {
+  {V_LOCK, 0, FILESYS_TABLE, 0, FILSYS_ID, MR_DEADLOCK},
+  {V_ID, 0, FILESYS_TABLE, LABEL, FILSYS_ID, MR_FILESYS},
+  {V_ID, 1, USERS_TABLE, LOGIN, USERS_ID, MR_USER},
+  {V_NUM, 2},
+};
+
 static struct validate anfq_validate = {
-  VOfilsys0user1,
-  3,
+  anfq_valobj,
+  4,
   FILSYS_ID,
   "filsys_id = %d AND type = 'USER' AND entity_id = %d",
   2,
@@ -2250,8 +2344,8 @@ static struct validate anfq_validate = {
 };
 
 static struct validate unfq_validate = {
-  VOfilsys0user1,
-  3,
+  anfq_valobj,
+  4,
   FILSYS_ID,
   "filsys_id = %d AND type = 'USER' AND entity_id = %d",
   2,
@@ -2262,7 +2356,7 @@ static struct validate unfq_validate = {
 };
 
 static struct validate dnfq_validate = {
-  VOfilsys0user1,
+  anfq_valobj,
   3,
   FILSYS_ID,
   "filsys_id = %d AND entity_id = %d",
@@ -2428,12 +2522,13 @@ static char *asvc_fields[] = {
 static struct valobj asvc_valobj[] = {
   {V_CHAR, 0, SERVICES_TABLE, NAME},
   {V_CHAR, 1, SERVICES_TABLE, "protocol"},
+  {V_NUM, 2},
   {V_CHAR, 3, SERVICES_TABLE, DESC},
 };
 
 static struct validate asvc_validate = {
   asvc_valobj,
-  3,
+  4,
   NAME,
   "name = '%s'",
   1,
@@ -2481,12 +2576,14 @@ static struct valobj apce_valobj[] = {
   {V_LEN, 2, PRINTCAP_TABLE, "dir"},
   {V_LEN, 3, PRINTCAP_TABLE, "rp"},
   {V_ID, 4, MACHINE_TABLE, NAME, MACH_ID, MR_MACHINE},
+  {V_NUM, 5},
+  {V_NUM, 6},
   {V_CHAR, 7, PRINTCAP_TABLE, "comments"},
 };
 
 static struct validate apce_validate = {
   apce_valobj,
-  6,
+  8,
   NAME,
   "name = '%s'",
   1,
@@ -2525,12 +2622,13 @@ static char *apdm_fields[] = {
 
 static struct valobj apdm_valobj[] = {
   {V_CHAR, 0, PALLADIUM_TABLE, NAME},
+  {V_NUM, 1},
   {V_ID, 2, MACHINE_TABLE, NAME, MACH_ID, MR_MACHINE},
 };
 
 static struct validate apdm_validate = {
   apdm_valobj,
-  2,
+  3,
   NAME,
   "name = '%s'",
   1,
@@ -2618,12 +2716,13 @@ static char *aval_fields[] = {
 
 static struct valobj aval_valobj[] = {
   {V_CHAR, 0, NUMVALUES_TABLE, NAME},
+  {V_NUM, 1},
 };
 
 static struct validate aval_validate = /* for aval, uval, and dval */
 {
   aval_valobj,
-  1,
+  2,
   NAME,
   "name = '%s'",
   1,
@@ -2645,10 +2744,14 @@ static char *_sdl_fields[] = {
     "level",
 };
 
+static struct valobj _sdl_valobj[] = {
+  {V_NUM, 0},
+};
+
 static struct validate _sdl_validate = 
 {
-    0,
-    0,
+    _sdl_valobj,
+    1,
     (char *)0,
     (char *)0,
     0,
@@ -4312,7 +4415,7 @@ struct query Queries2[] = {
     "mach_id = %d AND dir = '%s'",
     2,
     0,
-    &unfp_validate,
+    &ajnf_validate,
   },
 
   {
index 22e55b83a69e51bdcd56f6e4daf8bf3322c1c101..bdaf2411c08607b705834f190b4d7c8414ba2bf1 100644 (file)
@@ -57,7 +57,7 @@ struct validate
 /* Validated Object Types */
 enum vo_type {V_NAME, V_ID, V_TYPE, V_TYPEDATA, V_DATE, 
              V_RENAME, V_CHAR, V_LOCK, V_WILD, V_UPWILD,
-              V_RLOCK, V_LEN};
+              V_RLOCK, V_LEN, V_NUM};
 
 /* Validated Object Definition */
 struct valobj
index 400d6c5c4b37b927ec375a472714357ac3e6386d..dfd8e05f11b2d713109b67985ae5ba08b61cd55c 100644 (file)
@@ -37,6 +37,7 @@ int validate_rename(char *argv[], struct valobj *vo);
 int validate_type(char *argv[], struct valobj *vo);
 int validate_typedata(struct query *, char *argv[], struct valobj *vo);
 int validate_len(char *argv[], struct valobj *vo);
+int validate_num(char *argv[], struct valobj *vo);
 int lock_table(struct valobj *vo);
 int readlock_table(struct valobj *vo);
 int convert_wildcards_uppercase(char *arg);
@@ -141,6 +142,12 @@ int validate_fields(q, argv, vo, n)
            status = validate_len(argv, vo);
            break;
 
+       case V_NUM:
+           if (log_flags & LOG_VALID)
+             com_err(whoami, 0, "validating number: %s", argv[vo->index]);
+           status = validate_num(argv, vo);
+           break;
+
        case V_LOCK:
            status = lock_table(vo);
            break;
@@ -529,6 +536,20 @@ int readlock_table(vo)
                            */
 }
 
+/* Make sure the data is numeric */
+int validate_num(argv, vo)
+    register char *argv[];
+    register struct valobj *vo;
+{
+    char *p = argv[vo->index];
+    
+    if (*p == '-') p++;
+    for (;*p;p++)
+        if (*p < '0' || *p > '9') return MR_INTEGER;
+    
+    return MR_EXISTS;
+}
+
 /* Check the database at startup time. */
 
 void sanity_check_database(void)
This page took 3.013449 seconds and 5 git commands to generate.