]> andersk Git - moira.git/blobdiff - server/cache.dc
Diane Delgado's changes for a fixed table-locking order
[moira.git] / server / cache.dc
index 346245dafd754467ac6a5556d5ae344b3b21bb4e..6ee13326251aab7a76a2e0a32c40c96b75394bd2 100644 (file)
@@ -30,6 +30,7 @@ extern int ingres_errno, mr_errcode;
  *             List
  *             String
  *             Machine
+ *             Subnet
  *             Cluster
  *             Filesystem
  *    then we will have to rework the code that only looks at the first
@@ -113,6 +114,7 @@ int *id;
     char *iname;
     int j, rowcount;
     EXEC SQL END DECLARE SECTION;
+    char key;
     int h, ctr;
 
     h = hashname(name, type);
@@ -134,10 +136,18 @@ int *id;
 
     cachemisses++;
     iname = name;
+    key = *type;
 
-    switch (*type) {
+    if (!strcasecmp(type, "subnet"))
+      key = 'N';
+
+    switch (key) {
     case 'U':
     case 'u':
+       if (index(iname, '@') || (strlen(iname) > 8)) {
+           sqlca.sqlcode = 100;
+           break;
+       }
        EXEC SQL SELECT users_id INTO :j FROM users WHERE login=:iname;
        break;
     case 'L':
@@ -146,7 +156,11 @@ int *id;
        break;
     case 'M':
     case 'm':
-       EXEC SQL SELECT mach_id INTO :j FROM machine WHERE name=uppercase(:iname);
+       EXEC SQL SELECT mach_id INTO :j FROM machine WHERE name=UPPERCASE(:iname);
+       break;
+    case 'N':
+    case 'n':
+       EXEC SQL SELECT snet_id INTO :j FROM subnet WHERE name=UPPERCASE(:iname);
        break;
     case 'C':
     case 'c':
@@ -213,6 +227,7 @@ char **name;
     char iname[NAMESZ];
     int j, rowcount;
     EXEC SQL END DECLARE SECTION;
+    char key;
     int ctr;
 
     for (i = cachehead.next; i != &cachehead; i = i->next) {
@@ -231,31 +246,38 @@ char **name;
 
     cachemisses++;
     j = id;
+    key = *type;
+    if (!strcasecmp(type, "subnet"))
+      key = 'N';
 
-    switch (*type) {
+    switch (key) {
     case 'U':
     case 'u':
-       EXEC SQL SELECT login INTO :iname FROM users WHERE users_id=:j;
+       EXEC SQL SELECT CHAR(login) INTO :iname FROM users WHERE users_id=:j;
        break;
     case 'L':
     case 'l':
-       EXEC SQL SELECT name INTO :iname FROM list WHERE list_id=:j;
+       EXEC SQL SELECT CHAR(name) INTO :iname FROM list WHERE list_id=:j;
        break;
     case 'M':
     case 'm':
-       EXEC SQL SELECT name INTO :iname FROM machine WHERE mach_id=:j;
+       EXEC SQL SELECT CHAR(name) INTO :iname FROM machine WHERE mach_id=:j;
+       break;
+    case 'N':
+    case 'n':
+       EXEC SQL SELECT CHAR(name) INTO :iname FROM subnet WHERE snet_id=:j;
        break;
     case 'C':
     case 'c':
-       EXEC SQL SELECT name INTO :iname FROM cluster WHERE clu_id=:j;
+       EXEC SQL SELECT CHAR(name) INTO :iname FROM cluster WHERE clu_id=:j;
        break;
     case 'F':
     case 'f':
-       EXEC SQL SELECT label INTO :iname FROM filesys WHERE filsys_id=:j;
+       EXEC SQL SELECT CHAR(label) INTO :iname FROM filesys WHERE filsys_id=:j;
        break;
     case 'S':
     case 's':
-       EXEC SQL SELECT string INTO :iname FROM strings WHERE string_id=:j;
+       EXEC SQL SELECT CHAR(string) INTO :iname FROM strings WHERE string_id=:j;
        break;
     default:
        return(MR_INTERNAL);
This page took 0.03666 seconds and 4 git commands to generate.