$(LIB_rfc3961) $(LIB_roken) -lafsutil\
$(XLIBS)
-superuser-t: superuser-t.o test.cs.o test.ss.o test.xdr.o
- $(AFS_LDRULE) superuser-t.o test.cs.o test.ss.o test.xdr.o \
+superuser-t: superuser-t.o common.o test.cs.o test.ss.o test.xdr.o
+ $(AFS_LDRULE) superuser-t.o common.o \
+ test.cs.o test.ss.o test.xdr.o \
$(MODULE_LIBS)
-keys-t: keys-t.o
- $(AFS_LDRULE) keys-t.o $(MODULE_LIBS)
+keys-t: keys-t.o common.o
+ $(AFS_LDRULE) keys-t.o common.o $(MODULE_LIBS)
writekeyfile: writekeyfile.o
$(AFS_LDRULE) writekeyfile.o $(MODULE_LIBS)
test.h: test.xg
$(RXGEN) -A -x -h -o $@ $(srcdir)/test.xg
-superuser-t.o: test.h
+superuser-t.o: test.h common.h
clean:
rm -f *.o *.cs.c *.ss.c *.xdr.c test.h \
--- /dev/null
+/*
+ * Copyright (c) 2010 Your File System Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*!
+ * Common functions for building a configuration directory
+ */
+
+#include <afsconfig.h>
+#include <afs/param.h>
+#include <roken.h>
+
+#include <afs/afsutil.h>
+
+#include "common.h"
+
+static FILE *
+openConfigFile(char *dirname, char *filename) {
+ char *path = NULL;
+ FILE *file;
+
+ if (asprintf(&path, "%s/%s", dirname, filename) == -1)
+ return NULL;
+
+ file = fopen(path, "w");
+ free(path);
+ return file;
+}
+
+static void
+unlinkConfigFile(char *dirname, char *filename) {
+ char *path;
+
+ if (asprintf(&path, "%s/%s", dirname, filename) != -1) {
+ unlink(path);
+ free(path);
+ }
+}
+
+/*!
+ * Build a test configuration directory, containing a CellServDB and ThisCell
+ * file for the "example.org" cell
+ *
+ * @return
+ * The path to the configuration directory. This should be freed by the caller
+ * using free()
+ *
+ */
+
+char *
+buildTestConfig(void) {
+ char *dir = NULL;
+ FILE *file;
+
+ if (asprintf(&dir, "%s/afs_XXXXXX", gettmpdir()) == -1)
+ goto fail;
+
+ if (mkdtemp(dir) == NULL)
+ goto fail;
+
+ /* Create a CellServDB */
+ file = openConfigFile(dir, "CellServDB");
+ fprintf(file, ">example.org # An example cell\n");
+ fprintf(file, "127.0.0.1 #test.example.org\n");
+ fclose(file);
+
+ /* Create a ThisCell file */
+ file = openConfigFile(dir, "ThisCell");
+ fprintf(file, "example.org");
+ fclose(file);
+
+ return dir;
+
+fail:
+ if (dir)
+ free(dir);
+ return NULL;
+}
+
+/*!
+ * Delete at test configuration directory
+ */
+
+void
+unlinkTestConfig(char *dir)
+{
+ unlinkConfigFile(dir, "KeyFile");
+ unlinkConfigFile(dir, "CellServDB");
+ unlinkConfigFile(dir, "ThisCell");
+ unlinkConfigFile(dir, "UserList");
+ rmdir(dir);
+}
--- /dev/null
+/*
+ * Copyright (c) 2010 Your File System Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+extern char *buildTestConfig(void);
+extern void unlinkTestConfig(char *);
#include <tap/basic.h>
+#include "test.h"
+#include "common.h"
+
static int
copy(char *inFile, char *outFile)
{
memcmp(keyMaterial, buffer->val, buffer->len) == 0);
}
-
int main(int argc, char **argv)
{
struct afsconf_dir *dir;
struct rx_opaque *keyMaterial;
struct afsconf_typedKey *typedKey;
struct afsconf_typedKeyList *typedKeyList;
-
- char buffer[1024];
- char *dirEnd;
- FILE *file;
+ char *dirname;
+ char *keyfile;
afs_int32 kvno;
int code;
int i;
plan(122);
/* Create a temporary afs configuration directory */
- snprintf(buffer, sizeof(buffer), "%s/afs_XXXXXX", gettmpdir());
- mkdtemp(buffer);
- dirEnd = buffer + strlen(buffer);
-
- /* Create a CellServDB file */
- strcpy(dirEnd, "/CellServDB");
- file = fopen(buffer, "w");
- fprintf(file, ">example.org # An example cell\n");
- fprintf(file, "127.0.0.1 #test.example.org\n");
- fclose(file);
-
- /* Create a ThisCell file */
- strcpy(dirEnd, "/ThisCell");
- file = fopen(buffer, "w");
- fprintf(file, "example.org\n");
- fclose(file);
-
- /* Firstly, copy in a known keyfile. */
- strcpy(dirEnd, "/KeyFile");
- code = copy("KeyFile", buffer);
- if (code)
+
+ dirname = buildTestConfig();
+
+ if (asprintf(&keyfile, "%s/KeyFile", dirname) == -1)
goto out;
- *dirEnd='\0';
+ /* First, copy in a known keyfile */
+ code = copy("KeyFile", keyfile);
+ if (code)
+ goto out;
/* Start with a blank configuration directory */
- dir = afsconf_Open(strdup(buffer));
+ dir = afsconf_Open(dirname);
ok(dir != NULL, "Sucessfully re-opened config directory");
if (dir == NULL)
goto out;
* still have the same KeyFile */
afsconf_Close(dir);
- *dirEnd='\0';
- dir = afsconf_Open(strdup(buffer));
+ dir = afsconf_Open(dirname);
ok(dir != NULL, "Sucessfully re-opened config directory");
if (dir == NULL)
goto out;
is_int(AFSCONF_NOTFOUND, code, " ... and is really gone");
/* Unlink the KeyFile */
- strcpy(dirEnd, "/KeyFile");
- unlink(buffer);
+ unlink(keyfile);
/* Force a rebuild of the directory structure, just in case */
afsconf_Close(dir);
- *dirEnd='\0';
- dir = afsconf_Open(strdup(buffer));
+ dir = afsconf_Open(dirname);
ok(dir != NULL, "Sucessfully re-opened config directory");
if (dir == NULL)
goto out;
*/
afsconf_Close(dir);
- *dirEnd='\0';
- dir = afsconf_Open(strdup(buffer));
+ dir = afsconf_Open(dirname);
ok(dir != NULL, "Sucessfully re-opened config directory");
if (dir == NULL)
goto out;
afsconf_PutTypedKeyList(&typedKeyList);
out:
- strcpy(dirEnd, "/KeyFile");
- unlink(buffer);
- strcpy(dirEnd, "/CellServDB");
- unlink(buffer);
- strcpy(dirEnd, "/ThisCell");
- unlink(buffer);
- strcpy(dirEnd, "/UserList");
- unlink(buffer);
- *dirEnd='\0';
- rmdir(buffer);
+ unlinkTestConfig(dirname);
return 0;
}
#include <tap/basic.h>
#include "test.h"
+#include "common.h"
#define TEST_PORT 1234
int main(int argc, char **argv)
{
struct afsconf_dir *dir;
- char buffer[1024];
+ char *dirname;
int serverPid, clientPid, waited, stat;
char keymaterial[]="\x19\x17\xff\xe6\xbb\x77\x2e\xfc";
- char *dirEnd;
- FILE *file;
int code;
/* Start the client and the server if requested */
/* Otherwise, do the basic configuration, then start the client and
* server */
- snprintf(buffer, sizeof(buffer), "%s/afs_XXXXXX", gettmpdir());
- mkdtemp(buffer);
- dirEnd = buffer + strlen(buffer);
-
- /* Create a CellServDB file */
- strcpy(dirEnd, "/CellServDB");
- file = fopen(buffer, "w");
- fprintf(file, ">example.org # An example cell\n");
- fprintf(file, "127.0.0.1 #test.example.org\n");
- fclose(file);
-
- /* Create a ThisCell file */
- strcpy(dirEnd, "/ThisCell");
- file = fopen(buffer, "w");
- fprintf(file, "example.org\n");
- fclose(file);
-
- *dirEnd='\0';
- /* Start with a blank configuration directory */
- dir = afsconf_Open(strdup(buffer));
+ dirname = buildTestConfig();
+
+ dir = afsconf_Open(dirname);
if (dir == NULL) {
fprintf(stderr, "Unable to configure directory.\n");
exit(1);
exit(1);
}
- printf("Config directory is %s\n", buffer);
+ printf("Config directory is %s\n", dirname);
serverPid = fork();
if (serverPid == -1) {
/* Bang */
} else if (serverPid == 0) {
- execl(argv[0], argv[0], "-server", buffer, NULL);
+ execl(argv[0], argv[0], "-server", dirname, NULL);
exit(1);
}
clientPid = fork();
waitpid(serverPid, &stat, 0);
exit(1);
} else if (clientPid == 0) {
- execl(argv[0], argv[0], "-client", buffer, NULL);
+ execl(argv[0], argv[0], "-client", dirname, NULL);
}
do {
/* Client and server are both done, so cleanup after everything */
- strcpy(dirEnd, "/KeyFile");
- unlink(buffer);
- strcpy(dirEnd, "/CellServDB");
- unlink(buffer);
- strcpy(dirEnd, "/ThisCell");
- unlink(buffer);
- strcpy(dirEnd, "/UserList");
- unlink(buffer);
- *dirEnd='\0';
- rmdir(buffer);
+ /* unlinkTestConfig(dirname); */
return 0;
}