]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
bozo: report bosserver -rxbind address
authorMichael Meffie <mmeffie@sinenomine.net>
Thu, 22 Sep 2011 13:13:18 +0000 (09:13 -0400)
committerDerrick Brashear <shadow@dementix.org>
Wed, 28 Sep 2011 14:01:06 +0000 (07:01 -0700)
Create a file on bosserver startup called bosserver.rxbind in the
server local directory which contains an address local scripts may
use to contact the bosserver.

When bosserver is started with the -rxbind option, write the address
selected from the intersection of the interfaces, NetInfo, and
NetRestrict configuration to the bosserver.rxbind file, otherwise
write the loopback address 127.0.0.1.

Update the RedHat init script to use the new bosserver.rxbind file.

Change-Id: I00a4249ae7445f872625ec46f960e778483d1f9f
Reviewed-on: http://gerrit.openafs.org/5488
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>
src/bozo/bosserver.c
src/packaging/RedHat/openafs-server.init
src/util/dirpath.c
src/util/dirpath.hin
src/util/dirpath_nt.h

index d8db0106d41a70a9445a2b97699eed67f09a7a14..7e448d59f44aaa1f528121548b31cadcc570e417 100644 (file)
@@ -161,6 +161,8 @@ bozo_ReBozo(void)
        close(i);
     }
 
+    unlink(AFSDIR_SERVER_BOZRXBIND_FILEPATH);
+
     execv(argv[0], argv);      /* should not return */
     _exit(1);
 #endif /* AFS_NT40_ENV */
@@ -799,6 +801,34 @@ bozo_DeletePidFile(char *ainst, char *aname)
     return 0;
 }
 
+/**
+ * Create the rxbind file of this bosserver.
+ *
+ * @param host  bind address of this server
+ *
+ * @returns status
+ */
+void
+bozo_CreateRxBindFile(afs_uint32 host)
+{
+    char buffer[16];
+    FILE *fp;
+
+    if (host == htonl(INADDR_ANY)) {
+       host = htonl(0x7f000001);
+    }
+
+    afs_inet_ntoa_r(host, buffer);
+    bozo_Log("Listening on %s:%d\n", buffer, AFSCONF_NANNYPORT);
+    if ((fp = fopen(AFSDIR_SERVER_BOZRXBIND_FILEPATH, "w")) == NULL) {
+       bozo_Log("Unable to open rxbind address file: %s, code=%d\n",
+                AFSDIR_SERVER_BOZRXBIND_FILEPATH, errno);
+    } else {
+       fprintf(fp, "%s\n", buffer);
+       fclose(fp);
+    }
+}
+
 /* start a process and monitor it */
 
 #include "AFS_component_version_number.c"
@@ -1142,6 +1172,8 @@ main(int argc, char **argv, char **envp)
        exit(code);
     }
 
+    bozo_CreateRxBindFile(host);       /* for local scripts */
+
     /* opened the cell databse */
     bozo_confdir = tdir;
 
index 3cb62e9b922a9e60329a5a23bd70b121b283ac81..69179df3f5c27c98cb472f3c1fd811784903019c 100644 (file)
@@ -34,7 +34,14 @@ stop() {
                echo
                return 1
        fi
-       /usr/bin/bos shutdown localhost -wait -localauth
+       if [ "x$BOSSERVER_HOST" = "x" ] ; then
+               if [ -f /usr/afs/local/bosserver.rxbind ] ; then
+                       BOSSERVER_HOST=`cat /usr/afs/local/bosserver.rxbind`
+               else
+                       BOSSERVER_HOST="localhost"
+               fi
+       fi
+       /usr/bin/bos shutdown $BOSSERVER_HOST -wait -localauth
        RETVAL=$?
        if [ $RETVAL -ne 0 ] ; then
                echo -n $"failed to shutdown OpenAFS"
@@ -46,6 +53,7 @@ stop() {
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/openafs-server
+       [ $RETVAL -eq 0 ] && rm -f /usr/afs/local/bosserver.rxbind
        return $RETVAL
 }
 
index 9c8efbcbc89be7ddc215ee6f11603b32f3ccb873..a2162ba0cb23c4c88f32a61237b5cf42f274c0ed 100644 (file)
@@ -331,6 +331,9 @@ initDirPathArray(void)
     pathp = dirPathArray[AFSDIR_SERVER_BOZINIT_FILEPATH_ID];
     AFSDIR_SERVER_FILEPATH(pathp, AFSDIR_BOSCONFIG_DIR, AFSDIR_BOZINIT_FILE);
 
+    pathp = dirPathArray[AFSDIR_SERVER_BOZRXBIND_FILEPATH_ID];
+    AFSDIR_SERVER_FILEPATH(pathp, AFSDIR_BOSCONFIG_DIR, AFSDIR_BOZRXBIND_FILE);
+
     pathp = dirPathArray[AFSDIR_SERVER_BOSVR_FILEPATH_ID];
     AFSDIR_SERVER_FILEPATH(pathp, AFSDIR_BOSSERVER_DIR, AFSDIR_BOSVR_FILE);
 
index a1c9554a56e87784cd0da24b68ddea7f7f09f0e0..0a8416b560a02141f060ab024dce028efe052ada 100644 (file)
@@ -145,6 +145,7 @@ ConstructLocalLogPath(const char *cpath,
 #define AFSDIR_BOZCONFNEW_FILE  "BosConfig.new"
 #define AFSDIR_BOZINIT_FILE     "BozoInit"
 #define AFSDIR_BOZLOG_FILE      "BosLog"
+#define AFSDIR_BOZRXBIND_FILE   "bosserver.rxbind"
 #define AFSDIR_BOSVR_FILE       "bosserver"
 #define AFSDIR_VOLSERLOG_FILE   "VolserLog"
 #define AFSDIR_AUDIT_FILE       "Audit"
@@ -254,6 +255,7 @@ typedef enum afsdir_id {
       AFSDIR_SERVER_BOZCONFNEW_FILEPATH_ID,
       AFSDIR_SERVER_BOZINIT_FILEPATH_ID,
       AFSDIR_SERVER_BOZLOG_FILEPATH_ID,
+      AFSDIR_SERVER_BOZRXBIND_FILEPATH_ID,
       AFSDIR_SERVER_BOSVR_FILEPATH_ID,
       AFSDIR_SERVER_SLVGLOCK_FILEPATH_ID,
       AFSDIR_SERVER_VOLSERLOG_FILEPATH_ID,
@@ -335,6 +337,7 @@ const char *getDirPath(afsdir_id_t string_id);
 #define AFSDIR_SERVER_BOZCONFNEW_FILEPATH getDirPath(AFSDIR_SERVER_BOZCONFNEW_FILEPATH_ID)
 #define AFSDIR_SERVER_BOZINIT_FILEPATH getDirPath(AFSDIR_SERVER_BOZINIT_FILEPATH_ID)
 #define AFSDIR_SERVER_BOZLOG_FILEPATH getDirPath(AFSDIR_SERVER_BOZLOG_FILEPATH_ID)
+#define AFSDIR_SERVER_BOZRXBIND_FILEPATH getDirPath(AFSDIR_SERVER_BOZRXBIND_FILEPATH_ID)
 #define AFSDIR_SERVER_BOSVR_FILEPATH getDirPath(AFSDIR_SERVER_BOSVR_FILEPATH_ID)
 #define AFSDIR_SERVER_SLVGLOCK_FILEPATH getDirPath(AFSDIR_SERVER_SLVGLOCK_FILEPATH_ID)
 #define AFSDIR_SERVER_VOLSERLOG_FILEPATH getDirPath(AFSDIR_SERVER_VOLSERLOG_FILEPATH_ID)
index 0363470f87f4156a3c2668c25efabe7d7af93232..0e7121f12ed1aac3ab338a97b68ddaf8a808245b 100644 (file)
@@ -135,6 +135,7 @@ extern int
 #define AFSDIR_BOZCONFNEW_FILE  "BosConfig.new"
 #define AFSDIR_BOZINIT_FILE     "BozoInit"
 #define AFSDIR_BOZLOG_FILE      "BosLog"
+#define AFSDIR_BOZRXBIND_FILE   "bosserver.rxbind"
 #define AFSDIR_BOSVR_FILE       "bosserver"
 #define AFSDIR_VOLSERLOG_FILE   "VolserLog"
 #define AFSDIR_AUDIT_FILE       "Audit"
@@ -246,6 +247,7 @@ typedef enum afsdir_id {
     AFSDIR_SERVER_BOZCONFNEW_FILEPATH_ID,
     AFSDIR_SERVER_BOZINIT_FILEPATH_ID,
     AFSDIR_SERVER_BOZLOG_FILEPATH_ID,
+    AFSDIR_SERVER_BOZRXBIND_FILEPATH_ID,
     AFSDIR_SERVER_BOSVR_FILEPATH_ID,
     AFSDIR_SERVER_SLVGLOCK_FILEPATH_ID,
     AFSDIR_SERVER_VOLSERLOG_FILEPATH_ID,
@@ -327,6 +329,7 @@ const char *getDirPath(afsdir_id_t string_id);
 #define AFSDIR_SERVER_BOZCONFNEW_FILEPATH getDirPath(AFSDIR_SERVER_BOZCONFNEW_FILEPATH_ID)
 #define AFSDIR_SERVER_BOZINIT_FILEPATH getDirPath(AFSDIR_SERVER_BOZINIT_FILEPATH_ID)
 #define AFSDIR_SERVER_BOZLOG_FILEPATH getDirPath(AFSDIR_SERVER_BOZLOG_FILEPATH_ID)
+#define AFSDIR_SERVER_BOZRXBIND_FILEPATH getDirPath(AFSDIR_SERVER_BOZRXBIND_FILEPATH_ID)
 #define AFSDIR_SERVER_BOSVR_FILEPATH getDirPath(AFSDIR_SERVER_BOSVR_FILEPATH_ID)
 #define AFSDIR_SERVER_SLVGLOCK_FILEPATH getDirPath(AFSDIR_SERVER_SLVGLOCK_FILEPATH_ID)
 #define AFSDIR_SERVER_VOLSERLOG_FILEPATH getDirPath(AFSDIR_SERVER_VOLSERLOG_FILEPATH_ID)