tests: Add test keys in afstest_BuildTestConfig 35/14835/5
authorAndrew Deason <adeason@sinenomine.net>
Thu, 1 Apr 2021 05:12:43 +0000 (00:12 -0500)
committerBenjamin Kaduk <kaduk@mit.edu>
Tue, 28 Dec 2021 03:46:12 +0000 (22:46 -0500)
Change afstest_BuildTestConfig to add the local keys into the
generated config dir, unless the info->skipkeys is set. This just
makes afstest_BuildTestConfig a little easier to use for the common
case of generating a fully-usable config dir with usable keys (only
some callers want to skip generating keys in order to test
key-populating functionality).

Change-Id: I1ce9d062ea30c391a93562fc90bc18997de75383
Reviewed-on: https://gerrit.openafs.org/14835
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>

tests/auth/authcon-t.c
tests/auth/keys-t.c
tests/auth/realms-t.c
tests/auth/superuser-t.c
tests/auth/writekeyfile.c
tests/common/common.h
tests/common/config.c
tests/volser/vos-t.c

index bdfd256..2ea6c47 100644 (file)
@@ -52,13 +52,17 @@ main(int argc, char **argv)
     struct afsconf_typedKey *key;
     int code = 0;
     struct afsconf_bsso_info bsso;
+    struct afstest_configinfo bct;
 
     memset(&bsso, 0, sizeof(bsso));
+    memset(&bct, 0, sizeof(bct));
 
     afstest_SkipTestsIfBadHostname();
 
     plan(8);
-    dirname = afstest_BuildTestConfig();
+
+    bct.skipkeys = 1;
+    dirname = afstest_BuildTestConfig(&bct);
 
     dir = afsconf_Open(dirname);
     if (dir == NULL) {
index e814080..b36abb5 100644 (file)
@@ -109,6 +109,7 @@ int main(int argc, char **argv)
     struct rx_opaque *keyMaterial;
     struct afsconf_typedKey *typedKey;
     struct afsconf_typedKeyList *typedKeyList;
+    struct afstest_configinfo bct;
     char *dirname;
     char *keyfile;
     char *keyfilesrc;
@@ -116,13 +117,16 @@ int main(int argc, char **argv)
     int code;
     int i;
 
+    memset(&bct, 0, sizeof(bct));
+
     afstest_SkipTestsIfBadHostname();
 
     plan(134);
 
     /* Create a temporary afs configuration directory */
 
-    dirname = afstest_BuildTestConfig();
+    bct.skipkeys = 1;
+    dirname = afstest_BuildTestConfig(&bct);
 
     keyfile = afstest_asprintf("%s/KeyFile", dirname);
 
@@ -566,7 +570,7 @@ int main(int argc, char **argv)
     free(keyfile);
 
     /* Start a new test configuration */
-    dirname = afstest_BuildTestConfig();
+    dirname = afstest_BuildTestConfig(&bct);
     dir = afsconf_Open(dirname);
     ok(dir != NULL, "Sucessfully opened brand new config directory");
     if (dir == NULL)
index 23290d5..7acbe67 100644 (file)
@@ -251,7 +251,7 @@ test_edges(void)
     char *dirname;
 
     /* run edge case tests */
-    dirname = afstest_BuildTestConfig();
+    dirname = afstest_BuildTestConfig(NULL);
     dir = afsconf_Open(dirname);
     if (dir == NULL) {
        fprintf(stderr, "Unable to configure directory.\n");
@@ -268,7 +268,7 @@ test_no_config_files(void)
     char *dirname;
 
     /* run tests without config files */
-    dirname = afstest_BuildTestConfig();
+    dirname = afstest_BuildTestConfig(NULL);
     dir = afsconf_Open(dirname);
     if (dir == NULL) {
        fprintf(stderr, "Unable to configure directory.\n");
@@ -285,7 +285,7 @@ test_with_config_files(void)
     char *dirname;
 
     /* run tests with config files */
-    dirname = afstest_BuildTestConfig();
+    dirname = afstest_BuildTestConfig(NULL);
     write_krb_conf(dirname, "MY.REALM.ORG MY.OTHER.REALM.ORG");
     write_krb_excl(dirname);
     dir = afsconf_Open(dirname);
@@ -309,7 +309,7 @@ test_set_local_realms(void)
     ok(afsconf_SetLocalRealm("MY.OTHER.REALM.ORG") == 0, "set local realm MY.OTHER.REALM.ORG");
 
     /* run tests without config files */
-    dirname = afstest_BuildTestConfig();
+    dirname = afstest_BuildTestConfig(NULL);
     dir = afsconf_Open(dirname);
     if (dir == NULL) {
        fprintf(stderr, "Unable to configure directory.\n");
@@ -328,7 +328,7 @@ test_update_config_files(void)
     char *dirname;
     afs_int32 local = -1;
 
-    dirname = afstest_BuildTestConfig();
+    dirname = afstest_BuildTestConfig(NULL);
     write_krb_conf(dirname, "SOME.REALM.ORG");
     dir = afsconf_Open(dirname);
     if (dir == NULL) {
index 52c1902..bf41f8a 100644 (file)
@@ -399,7 +399,6 @@ int main(int argc, char **argv)
     struct afsconf_dir *dir;
     char *dirname;
     int serverPid, clientPid, waited, stat;
-    int code;
     int ret = 0;
     sigset_t set;
     char *argv0 = afstest_GetProgname(argv);
@@ -430,7 +429,7 @@ int main(int argc, char **argv)
     sigaddset(&set, SIGUSR1);
     opr_Verify(sigprocmask(SIG_BLOCK, &set, NULL) == 0);
 
-    dirname = afstest_BuildTestConfig();
+    dirname = afstest_BuildTestConfig(NULL);
 
     dir = afsconf_Open(dirname);
     if (dir == NULL) {
@@ -439,13 +438,6 @@ int main(int argc, char **argv)
        goto out;
     }
 
-    code = afstest_AddDESKeyFile(dir);
-    if (code) {
-       afs_com_err(argv0, code, "while adding new key\n");
-       ret = 1;
-       goto out;
-    }
-
     printf("Config directory is %s\n", dirname);
     serverPid = fork();
     if (serverPid == -1) {
index 918bb2a..362b473 100644 (file)
@@ -23,8 +23,13 @@ main(int argc, char **argv)
     char *keyfile = NULL;
     int in, out;
     size_t len;
+    struct afstest_configinfo bct;
 
-    dirname = afstest_BuildTestConfig();
+    memset(&bct, 0, sizeof(bct));
+
+    bct.skipkeys = 1;
+
+    dirname = afstest_BuildTestConfig(&bct);
     if (dirname == NULL) {
        fprintf(stderr, "Unable to create tmp config dir\n");
        exit(1);
index 213ab87..d2f69a1 100644 (file)
  */
 
 /* config.c */
-extern char *afstest_BuildTestConfig(void);
+
+struct afstest_configinfo {
+    /* Skip adding keys to the created conf dir. */
+    int skipkeys;
+};
+extern char *afstest_BuildTestConfig(struct afstest_configinfo *info);
 
 struct afsconf_dir;
 extern int afstest_AddDESKeyFile(struct afsconf_dir *dir);
index 3603b00..0cddd0a 100644 (file)
@@ -51,25 +51,35 @@ openConfigFile(char *dirname, char *filename) {
 
 /*!
  * Build a test configuration directory, containing a CellServDB and ThisCell
- * file for the "example.org" cell
+ * file for the "example.org" cell. Also populates the KeyFile unless
+ * info->skipkeys is set.
  *
+ * @param[in] info  Various details for how to create the config dir. If NULL,
+ *                 use a default zeroed struct.
  * @return
  * The path to the configuration directory. This should be freed by the caller
  * using free()
- *
  */
-
 char *
-afstest_BuildTestConfig(void) {
+afstest_BuildTestConfig(struct afstest_configinfo *info)
+{
     char *dir = NULL;
     FILE *file;
+    struct afsconf_dir *confdir = NULL;
+    struct afstest_configinfo info_defaults;
     struct in_addr iaddr;
+    int code;
 
+    memset(&info_defaults, 0, sizeof(info_defaults));
     memset(&iaddr, 0, sizeof(iaddr));
 
+    if (info == NULL) {
+       info = &info_defaults;
+    }
+
     dir = afstest_mkdtemp();
     if (dir == NULL) {
-       goto fail;
+       goto error;
     }
 
     /* Work out which IP address to use in our CellServDB. We figure this out
@@ -87,11 +97,31 @@ afstest_BuildTestConfig(void) {
     fprintf(file, "example.org");
     fclose(file);
 
+    if (!info->skipkeys) {
+       confdir = afsconf_Open(dir);
+       if (confdir == NULL) {
+           goto error;
+       }
+
+       code = afstest_AddDESKeyFile(confdir);
+       if (code != 0) {
+           goto error;
+       }
+
+       afsconf_Close(confdir);
+       confdir = NULL;
+    }
+
     return dir;
 
-fail:
-    if (dir)
+ error:
+    if (confdir != NULL) {
+       afsconf_Close(confdir);
+    }
+    if (dir != NULL) {
+       afstest_rmdtemp(dir);
        free(dir);
+    }
     return NULL;
 }
 
index f00fdbf..813e568 100644 (file)
@@ -96,17 +96,10 @@ main(int argc, char **argv)
 
     code = rx_Init(0);
 
-    dirname = afstest_BuildTestConfig();
+    dirname = afstest_BuildTestConfig(NULL);
 
     dir = afsconf_Open(dirname);
 
-    code = afstest_AddDESKeyFile(dir);
-    if (code) {
-       afs_com_err(argv0, code, "while adding test DES keyfile");
-       ret = 1;
-       goto out;
-    }
-
     code = afstest_StartVLServer(dirname, &serverPid);
     if (code) {
        afs_com_err(argv0, code, "while starting the vlserver");