From dbe948ca3ebdad97f4f2096f6074623fc2a8e3c8 Mon Sep 17 00:00:00 2001 From: Russ Allbery Date: Fri, 5 Oct 2007 00:16:26 +0000 Subject: Pull the file writing code for the wallet client into a separate file so that the srvtab and keytab management can share it. Write atomically to a new file and then link and rename to do an atomic update. Leave a backup copy of any file that's replaced. --- client/internal.h | 30 +++++++----------------------- 1 file changed, 7 insertions(+), 23 deletions(-) (limited to 'client/internal.h') diff --git a/client/internal.h b/client/internal.h index 834ec57..186d83f 100644 --- a/client/internal.h +++ b/client/internal.h @@ -11,29 +11,8 @@ #ifndef CLIENT_INTERNAL_H #define CLIENT_INTERNAL_H 1 -/* __attribute__ is available in gcc 2.5 and later, but only with gcc 2.7 - could you use the __format__ form of the attributes, which is what we use - (to avoid confusion with other macros). */ -#ifndef __attribute__ -# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) -# define __attribute__(spec) /* empty */ -# endif -#endif - -/* Used for unused parameters to silence gcc warnings. */ -#define UNUSED __attribute__((__unused__)) - -/* BEGIN_DECLS is used at the beginning of declarations so that C++ - compilers don't mangle their names. END_DECLS is used at the end. */ -#undef BEGIN_DECLS -#undef END_DECLS -#ifdef __cplusplus -# define BEGIN_DECLS extern "C" { -# define END_DECLS } -#else -# define BEGIN_DECLS /* empty */ -# define END_DECLS /* empty */ -#endif +#include +#include /* Temporary until we have some real configuration. */ #ifndef SERVER @@ -45,6 +24,11 @@ BEGIN_DECLS +/* Given a filename, some data, and a length, write that data to the given + file safely and atomically by creating file.new, writing the data, linking + file to file.bak, and then renaming file.new to file. */ +void write_file(const char *name, const void *data, size_t length); + /* Given a srvtab file, the Kerberos v5 principal, and the keytab file, write a srvtab file for the corresponding Kerberos v4 principal. */ void write_srvtab(const char *srvtab, const char *principal, -- cgit v1.2.3