xdm_file.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00039 #include <stdio.h>
00040 #include <string.h>
00041
00042 #ifndef _WIN32
00043 # include <sys/types.h>
00044 # include <sys/stat.h>
00045 #endif
00046
00052 #ifdef _WIN32
00053 # define WIN32_LEAN_AND_MEAN
00054 # include <windows.h>
00055 # define strnenv(d,s,n) (ExpandEnvironmentStringsA((LPCSTR)(s),(LPSTR)(d),(n)-1),(d))
00056 # define XDM_ALOGPATH "%SystemRoot%"
00057 # define XDMAPI __cdecl
00058 # define XDMEXP __declspec(dllexport)
00059 # define FOPEN_FLAGSTR "ab"
00060 #else
00061 # define strnenv(d,s,n) ((strncpy((d),(s),(n)-1)[(n)-1] = 0),(d))
00062 # define XDM_ALOGPATH LSTDIR "/log"
00063 # define XDMAPI
00064 # define XDMEXP
00065 # define FOPEN_FLAGSTR "a"
00066 #endif
00067
00068 #define XDM_ALOGFNAME "xdas_audit.log"
00069
00071 #define XDM_DEF_ALOGFILE XDM_ALOGPATH "/" XDM_ALOGFNAME
00072
00074 static char s_alogfile[FILENAME_MAX];
00075
00077 static FILE * s_file = 0;
00078
00080 static void (*s_fplogmsg)(int level, const char * msg, ... ) = 0;
00081
00092 XDMEXP int XDMAPI xdm_append(const char ** msgflds)
00093 {
00094 if (fprintf(s_file, "%s\n", msgflds[0])
00095 < (int)(msgflds[33] - msgflds[0] - 1) || fflush(s_file) != 0)
00096 return -1;
00097 return 0;
00098 }
00099
00106 XDMEXP int XDMAPI xdm_init(void (*logmsg)(int level, const char * msg, ... ),
00107 char * (*getcnfstr)(const char *, char *, size_t *))
00108 {
00109 size_t bufsz = sizeof(s_alogfile);
00110
00111 s_fplogmsg = logmsg;
00112
00113 (*getcnfstr)("xdasd.loggers.file.alogname", s_alogfile, &bufsz);
00114 if (bufsz == 0)
00115 (void)strnenv(s_alogfile, XDM_DEF_ALOGFILE, sizeof(XDM_DEF_ALOGFILE));
00116
00117 (*s_fplogmsg)(0, "xdm_file: Audit log file: %s\n", s_alogfile);
00118
00119 #ifndef _WIN32
00120 umask(026);
00121 #endif
00122
00123 if ((s_file = fopen(s_alogfile, FOPEN_FLAGSTR)) == 0)
00124 return -1;
00125 return 0;
00126 }
00127
00132 XDMEXP void XDMAPI xdm_exit(void)
00133 {
00134 if (s_file != 0)
00135 {
00136 fclose(s_file);
00137 s_file = 0;
00138 }
00139 }
00140