]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE12-freelance-updates-20011031
authorJeff Riegel <riegel@almaden.ibm.com>
Thu, 15 Nov 2001 03:30:08 +0000 (03:30 +0000)
committerDerrick Brashear <shadow@dementia.org>
Thu, 15 Nov 2001 03:30:08 +0000 (03:30 +0000)
freelance client updates

(cherry picked from commit c1d1a27ba99284b8877f4449f2871eb81a9b31ce)

15 files changed:
src/WINNT/afsd/cm_cell.c
src/WINNT/afsd/cm_cell.h
src/WINNT/afsd/cm_freelance.c
src/WINNT/afsd/cm_ioctl.c
src/WINNT/afsd/cm_vnodeops.c
src/auth/cellconfig.c
src/bozo/NTMakefile
src/bucoord/NTMakefile
src/budb/NTMakefile
src/butc/NTMakefile
src/ptserver/ptclient.c
src/tbutc/NTMakefile
src/update/NTMakefile
src/vlserver/NTMakefile
src/volser/NTMakefile

index 5ef16bc9a6328dd896884a59ff696892e2fce3f4..e2ba9e4cac8c500fc8600f80442aa1d52f1fcef7 100644 (file)
@@ -56,15 +56,24 @@ long cm_AddCellProc(void *rockp, struct sockaddr_in *addrp, char *namep)
 
 /* load up a cell structure from the cell database, afsdcell.ini */
 cm_cell_t *cm_GetCell(char *namep, long flags)
+{
+  return cm_GetCell_Gen(namep, NULL, flags);
+}
+
+cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, long flags)
 {
        cm_cell_t *cp;
         long code;
         static cellCounter = 1;                /* locked by cm_cellLock */
        int ttl;
+       char fullname[200];
 
        lock_ObtainWrite(&cm_cellLock);
        for(cp = cm_allCellsp; cp; cp=cp->nextp) {
-               if (strcmp(namep, cp->namep) == 0) break;
+               if (strcmp(namep, cp->namep) == 0) {
+                 strcpy(fullname, cp->namep);
+                 break;
+               }
         }
 
        if ((!cp && (flags & CM_FLAG_CREATE))
@@ -75,10 +84,11 @@ cm_cell_t *cm_GetCell(char *namep, long flags)
          ) {
                if (!cp) cp = malloc(sizeof(*cp));
                 memset(cp, 0, sizeof(*cp));
-                code = cm_SearchCellFile(namep, NULL, cm_AddCellProc, cp);
+                code = cm_SearchCellFile(namep, fullname, cm_AddCellProc, cp);
+               if (code) {
 #ifdef AFS_AFSDB_ENV
-                if (code && cm_dnsEnabled) {
-                  code = cm_SearchCellByDNS(namep, NULL, &ttl, cm_AddCellProc, cp);
+                 if (cm_dnsEnabled /*&& cm_DomainValid(namep)*/)
+                   code = cm_SearchCellByDNS(namep, fullname, &ttl, cm_AddCellProc, cp);
 #endif
                  if (code) {
                    free(cp);
@@ -90,8 +100,8 @@ cm_cell_t *cm_GetCell(char *namep, long flags)
                    cp->flags |= CM_CELLFLAG_DNS;
                    cp->timeout = time(0) + ttl;
                  }
-               }
 #endif
+               }
 
                /* randomise among those vlservers having the same rank*/ 
                cm_RandomizeServer(&cp->vlServersp);
@@ -100,8 +110,8 @@ cm_cell_t *cm_GetCell(char *namep, long flags)
                 lock_InitializeMutex(&cp->mx, "cm_cell_t mutex");
 
                /* copy in name */
-                cp->namep = malloc(strlen(namep)+1);
-                strcpy(cp->namep, namep);
+                cp->namep = malloc(strlen(fullname)+1);
+                strcpy(cp->namep, fullname);
 
                /* thread on global list */
                 cp->nextp = cm_allCellsp;
@@ -111,6 +121,8 @@ cm_cell_t *cm_GetCell(char *namep, long flags)
         }
 
 done:
+       if (newnamep)
+         strcpy(newnamep, fullname);
        lock_ReleaseWrite(&cm_cellLock);
         return cp;
 }
index a642d04d2a179332a757722e5d10050a23651990..bf0363435e220217ff675006ecdfe64560c2f471 100644 (file)
@@ -30,6 +30,8 @@ extern void cm_InitCell(void);
 
 extern cm_cell_t *cm_GetCell(char *namep, long flags);
 
+extern cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, long flags);
+
 extern cm_cell_t *cm_FindCellByID(long cellID);
 
 extern void cm_ChangeRankCellVLServer(cm_server_t       *tsp);
index 1da7f857dc86bbc37517bbb64ac57ba769049ff1..26d3c1fd5b0098a3d9c1c350c4f26d592dac660d 100644 (file)
@@ -435,13 +435,24 @@ cm_localMountPoint_t* cm_getLocalMountPoint(int vnode) {
        return 0;
 }
 
-long cm_FreelanceAddMount(char *filename, char *cellname, char *volume)
+long cm_FreelanceAddMount(char *filename, char *cellname, char *volume, cm_fid_t *fidp)
 {
     FILE *fp;
     char hfile[120];
     char line[200];
+    char fullname[200];
     int n;
 
+    /* before adding, verify the cell name; if it is not a valid cell,
+       don't add the mount point */
+    /* major performance issue? */
+    if (!cm_GetCell_Gen(cellname, fullname, CM_FLAG_CREATE))
+      return -1;
+#if 0
+    if (strcmp(cellname, fullname) != 0)   /* no partial matches allowed */
+      return -1;
+#endif
+    
     lock_ObtainMutex(&cm_Freelance_Lock);
 
      cm_GetConfigDir(hfile);
@@ -455,12 +466,17 @@ long cm_FreelanceAddMount(char *filename, char *cellname, char *volume)
      fseek(fp, 0, SEEK_SET);
      fprintf(fp, "%d", n);
      fseek(fp, 0, SEEK_END);
-     fprintf(fp, "%s#%s:%s\n", filename, cellname, volume);
+     fprintf(fp, "%s#%s:%s\n", filename, fullname, volume);
      fclose(fp);
      lock_ReleaseMutex(&cm_Freelance_Lock);
 
+     /*cm_reInitLocalMountPoints(&vnode);*/
+     if (fidp) {
+       fidp->unique = 1;
+       fidp->vnode = cm_noLocalMountPoints + 1;   /* vnode value of last mt pt */
+     }
      cm_noteLocalMountPointChange();
-
+     
      return 0;
 }
 
index eb5a6715ced8ab867d0fc7205412a07cd629146c..17399bf6fe52e9a865fdb6e730ea9b2cb276ae71 100644 (file)
@@ -1176,7 +1176,7 @@ long cm_IoctlCreateMountPoint(struct smb_ioctl *ioctlp, struct cm_user *userp)
        if (cm_freelanceEnabled && dscp == cm_rootSCachep) {
          /* we are adding the mount point to the root dir., so call
             the freelance code to do the add. */
-         code = cm_FreelanceAddMount(leaf, fullCell, volume);
+         code = cm_FreelanceAddMount(leaf, fullCell, volume, NULL);
          return code;
        }
 #endif
index e29d89dd1f37339ff676953b67a77945ecb0d725..7e7da24e546f79a0cbd52bc7f8a48bf682c9a1ca 100644 (file)
@@ -959,6 +959,7 @@ long cm_Lookup(cm_scache_t *dscp, char *namep, long flags, cm_user_t *userp,
         cm_scache_t *mountedScp;
         cm_lookupSearch_t rock;
         char tname[256];
+       int getroot;
 
        if (dscp->fid.vnode == 1 && dscp->fid.unique == 1
            && strcmp(namep, "..") == 0) {
@@ -988,12 +989,27 @@ long cm_Lookup(cm_scache_t *dscp, char *namep, long flags, cm_user_t *userp,
         * looking for.  Any other non-zero code is an error.
          */
         if (code && code != CM_ERROR_STOPNOW) return code;
-        
-        if (!rock.found)
+
+       getroot = (dscp==cm_rootSCachep) ;
+        if (!rock.found) {
+         if (!cm_freelanceEnabled || !getroot) {
                if (flags & CM_FLAG_CHECKPATH)
                        return CM_ERROR_NOSUCHPATH;
                else
                        return CM_ERROR_NOSUCHFILE;
+         }
+         else {  /* nonexistent dir on freelance root, so add it */
+           code = cm_FreelanceAddMount(namep, namep, "root.cell.",
+                                       &rock.fid);
+           if (code < 0) {   /* add mount point failed, so give up */
+             if (flags & CM_FLAG_CHECKPATH)
+               return CM_ERROR_NOSUCHPATH;
+             else
+               return CM_ERROR_NOSUCHFILE;
+           }
+           tscp = NULL;   /* to force call of cm_GetSCache */
+         }
+       }
         
 haveFid:       
        if ( !tscp )    /* we did not find it in the dnlc */
@@ -1190,9 +1206,17 @@ long cm_AssembleLink(cm_scache_t *linkScp, char *pathSuffixp,
                 *newRootScpp = cm_rootSCachep;
                 cm_HoldSCache(cm_rootSCachep);
         } else if (*linkp == '\\' || *linkp == '/') {
+         /* formerly, this was considered to be from the AFS root,
+            but this seems to create problems.  instead, we will just
+            reject the link */
+#if 0
                strcpy(tsp->data, linkp+1);
                 *newRootScpp = cm_rootSCachep;
                 cm_HoldSCache(cm_rootSCachep);
+#else
+               code = CM_ERROR_NOSUCHPATH;
+               goto done;
+#endif
         }
         else {
                /* a relative link */
index a9d89598cbc70ead4613a42f9cec135acba3575a..cf40e41068f02443a4f81797c188e22fe5dcd402 100644 (file)
@@ -33,12 +33,12 @@ RCSID("$Header$");
 #include <netdb.h>
 #include <sys/file.h>
 #include <sys/time.h>
-#include <afs/afsint.h>
 #ifdef AFS_AFSDB_ENV
 #include <arpa/nameser.h>
 #include <resolv.h>
 #endif /* AFS_AFSDB_ENV */
 #endif /* AFS_NT40_ENV */
+#include <afs/afsint.h>
 #include <errno.h>
 #include <ctype.h>
 #include <time.h>
index 4653dc80c91403ce545d11d3ec1e8257e5060dd9..7a6f085246481a3e07c871a4fa9d298f910d5814 100644 (file)
@@ -66,7 +66,8 @@ BOSSERVER_EXELIBS =\
        $(DESTDIR)\lib\afs\afsaudit.lib \
        $(DESTDIR)\lib\afs\afsreg.lib \
        $(DESTDIR)\lib\afs\afseventlog.lib \
-       $(DESTDIR)\lib\afs\afsprocmgmt.lib
+       $(DESTDIR)\lib\afs\afsprocmgmt.lib \
+       $(DESTDIR)\lib\cm_dns.obj
 
 $(BOSSERVER_EXEFILE): $(BOSSERVER_EXEOBJS) $(BOSSERVER_EXELIBS)
        $(EXECONLINK)
@@ -100,7 +101,8 @@ BOS_EXELIBS =\
        $(DESTDIR)\lib\afs\afsbos.lib \
        $(DESTDIR)\lib\afs\afsreg.lib \
        $(DESTDIR)\lib\afs\afsprocmgmt.lib \
-       $(DESTDIR)\lib\afs\afspioctl.lib
+       $(DESTDIR)\lib\afs\afspioctl.lib \
+       $(DESTDIR)\lib\cm_dns.obj
 
 
 $(RS_BOS_EXEFILE): $(BOS_EXEOBJS) $(BOS_EXELIBS)
index bc2437b26231b586b34d373885d3ff6942291139..68e5fe6073aa2ccb51d3fa75501c6eeb7b8846f6 100644 (file)
@@ -79,7 +79,8 @@ EXELIBS =\
         $(DESTDIR)\lib\afs\afsusd.lib \
        $(DESTDIR)\lib\afs\afsprocmgmt.lib \
        $(DESTDIR)\lib\afs\afspioctl.lib \
-       $(DESTDIR)\lib\afs\afsreg.lib
+       $(DESTDIR)\lib\afs\afsreg.lib \
+     $(DESTDIR)\lib\cm_dns.obj
        
 
 $(EXEFILE): $(EXEOBJS) $(EXELIBS)
index 278bf71b8a7988b24f29bc68941c01641b22e13e..2bbe304567b6c687ae1bd9e9e85e376cc4c94efd 100644 (file)
@@ -75,7 +75,8 @@ EXELIBS =\
        $(DESTDIR)\lib\afsubik.lib \
        $(DESTDIR)\lib\afs\afseventlog.lib \
        $(DESTDIR)\lib\afs\afsreg.lib \
-       $(DESTDIR)\lib\afs\afsprocmgmt.lib
+       $(DESTDIR)\lib\afs\afsprocmgmt.lib \
+       $(DESTDIR)\lib\cm_dns.obj
 
 
 $(EXEFILE): $(EXEOBJS)  $(EXELIBS)
index e798e6de007c3d67e61d425e82dcc55650ae0726..9c87cf826b866fec16d94373aca9e3d1895f74ee 100644 (file)
@@ -49,7 +49,8 @@ EXELIBS =\
        $(DESTDIR)\lib\afs\afsprocmgmt.lib \
        $(DESTDIR)\lib\afs\afspioctl.lib \
        $(DESTDIR)\lib\afs\afseventlog.lib \
-       $(DESTDIR)\lib\afs\afsreg.lib
+       $(DESTDIR)\lib\afs\afsreg.lib \
+       $(DESTDIR)\lib\cm_dns.obj
 
 $(EXEFILE): $(EXEOBJS) $(EXELIBS)
        $(EXECONLINK)
index 8fa312ff0b8d9c172dbc7f6d4fe470d23e65c640..92a49ecf0d1f81c6ac450c26d48540d396c88037 100644 (file)
@@ -21,8 +21,8 @@ RCSID("$Header$");
 #include <WINNT/afsevent.h>
 #else
 #include <netinet/in.h>
-#endif
 #include <netdb.h>
+#endif
 #include <stdio.h>
 #include <rx/xdr.h>
 #include <rx/rx.h>
index 6d3ec64504f1ee9195f19d2540c8e02279c34104..261fa2069556d52bb53b52bd0d0b3c2ea75b2897 100644 (file)
@@ -73,7 +73,8 @@ BUTCLIBS=$(DESTDIR)\lib\afs\afsbudb.lib  \
 !ELSE
        $(DESTDIR)\lib\pthread.lib \
 !ENDIF
-            $(DESTDIR)\lib\afsdes.lib
+            $(DESTDIR)\lib\afsdes.lib \
+            $(DESTDIR)\lib\cm_dns.obj
 
 
 #      $(DESTDIR)\lib\afsauthent.lib \
index 607c7452078ce82e31924e31d9d3de4c600d28d4..8643cca38a6447da7c3b70a2ffdcec57151ff1ce 100644 (file)
@@ -21,7 +21,8 @@ LIBS = \
        $(DESTDIR)\lib\afsubik.lib \
        $(DESTDIR)\lib\afs\afseventlog.lib \
        $(DESTDIR)\lib\afsrxkad.lib \
-       $(DESTDIR)\lib\afs\afsprocmgmt.lib
+       $(DESTDIR)\lib\afs\afsprocmgmt.lib \
+       $(DESTDIR)\lib\cm_dns.obj
 
 ############################################################################
 # Definitions for generating files via RXGEN
index 9f0a5e4b5abc04ec72c546399d5f16193b7d7f94..e2331e4e101d7ed6cdbb8e4a3a41aa09c24e2dfd 100644 (file)
@@ -85,7 +85,8 @@ VLSERVER_EXECLIBS = \
        $(DESTDIR)\lib\afs\afsaudit.lib \
        $(DESTDIR)\lib\afs\afseventlog.lib \
        $(DESTDIR)\lib\afs\afsreg.lib \
-       $(DESTDIR)\lib\afs\afsprocmgmt.lib
+       $(DESTDIR)\lib\afs\afsprocmgmt.lib \
+       $(DESTDIR)\lib\cm_dns.obj
 
        
 $(VLSERVER): $(VLSERVER_EXEOBJS) $(LIBFILE) $(VLSERVER_EXECLIBS)
index 90d4038fc955345620f15f904e0e671f14c962c3..f9f2e70392cf1b16b9dc46f7824a4ac95f782399 100644 (file)
@@ -64,7 +64,8 @@ EXEC_LIBS = \
        $(DESTDIR)\lib\afslwp.lib \
        $(DESTDIR)\lib\afs\afsacl.lib \
        $(DESTDIR)\lib\afs\afsreg.lib \
-       $(DESTDIR)\lib\afs\afseventlog.lib
+       $(DESTDIR)\lib\afs\afseventlog.lib \
+     $(DESTDIR)\lib\cm_dns.obj
 
 
 ############################################################################