xdm_file.c

Go to the documentation of this file.
00001 /*----------------------------------------------------------------------------
00002  * Copyright (c) 2006, Novell, Inc.
00003  * All rights reserved.
00004  * 
00005  * Redistribution and use in source and binary forms, with or without 
00006  * modification, are permitted provided that the following conditions are 
00007  * met:
00008  * 
00009  *     * Redistributions of source code must retain the above copyright 
00010  *       notice, this list of conditions and the following disclaimer.
00011  *     * Redistributions in binary form must reproduce the above copyright 
00012  *       notice, this list of conditions and the following disclaimer in the 
00013  *       documentation and/or other materials provided with the distribution.
00014  *     * Neither the name of the Novell nor the names of its contributors 
00015  *       may be used to endorse or promote products derived from this 
00016  *       software without specific prior written permission.
00017  * 
00018  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
00019  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
00020  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
00021  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
00022  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
00023  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
00024  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
00025  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
00026  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
00027  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
00028  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
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; /* save logmsg function pointer */
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); /* ensure files created with 0666 end up with 0640 */
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 

Generated on Thu Aug 20 22:33:05 2009 for OpenXDAS by  doxygen 1.5.6