comparison mcabber/src/utils.c @ 374:bd5638c21834

Improve logging system (traces) There are now two trace logging levels: * tracelog_level = 1: Most messages from the log window are written to disk (LPRINT_LOG) * tracelog_level =2: LPRINT_LOG & LPRINT_DEBUG messages are written to disk The trace file name is set with the "tracelog_file" option.
author Mikael Berthe <mikael@lilotux.net>
date Mon, 25 Jul 2005 21:46:35 +0100
parents 33b8e801ffa6
children 2e6c7b1440d1
comparison
equal deleted inserted replaced
373:af2f8ddf6a1b 374:bd5638c21834
38 38
39 void ut_InitDebug(unsigned int level, const char *filename) 39 void ut_InitDebug(unsigned int level, const char *filename)
40 { 40 {
41 FILE *fp; 41 FILE *fp;
42 42
43 if (!level) { 43 if (level < 1) {
44 DebugEnabled = 0; 44 DebugEnabled = 0;
45 FName = NULL; 45 FName = NULL;
46 return; 46 return;
47 } 47 }
48 48
60 } 60 }
61 } 61 }
62 62
63 DebugEnabled = level; 63 DebugEnabled = level;
64 64
65 fp = fopen(FName, "w"); 65 fp = fopen(FName, "a");
66 if (!fp) return; 66 if (!fp) return;
67 fprintf(fp, "Debugging mode started...\n" 67 fprintf(fp, "New trace log started.\n"
68 "-----------------------------------\n"); 68 "----------------------\n");
69 fchmod(fileno(fp), S_IRUSR|S_IWUSR);
69 fclose(fp); 70 fclose(fp);
70 } 71 }
71 72
72 void ut_WriteLog(const char *fmt, ...) 73 void ut_WriteLog(unsigned int flag, const char *data)
73 { 74 {
74 FILE *fp = NULL; 75 if (!DebugEnabled || !FName) return;
75 time_t ahora; 76
76 va_list ap; 77 if (((DebugEnabled == 2) && (flag & (LPRINT_LOG|LPRINT_DEBUG))) ||
77 char *buffer = NULL; 78 ((DebugEnabled == 1) && (flag & LPRINT_LOG))) {
78 79 FILE *fp = fopen(FName, "a+");
79 if (DebugEnabled && FName) {
80 fp = fopen(FName, "a+");
81 if (!fp) return; 80 if (!fp) return;
82 buffer = (char *) calloc(1, 64); 81 fputs(data, fp);
83
84 ahora = time(NULL);
85 strftime(buffer, 64, "[%H:%M:%S] ", localtime(&ahora));
86 fprintf(fp, "%s", buffer);
87
88 va_start(ap, fmt);
89 vfprintf(fp, fmt, ap);
90 va_end(ap);
91
92 free(buffer);
93 fclose(fp); 82 fclose(fp);
94 } 83 }
95 } 84 }
96 85
97 // checkset_perm(name, setmode) 86 // checkset_perm(name, setmode)
105 94
106 fd = lstat(name, &buf); 95 fd = lstat(name, &buf);
107 if (fd == -1) return -1; 96 if (fd == -1) return -1;
108 97
109 if (buf.st_uid != geteuid()) { 98 if (buf.st_uid != geteuid()) {
110 scr_LogPrint("Wrong file owner [%s]", name); 99 scr_LogPrint(LPRINT_LOGNORM, "Wrong file owner [%s]", name);
111 return 1; 100 return 1;
112 } 101 }
113 102
114 if (buf.st_mode & (S_IRGRP | S_IWGRP | S_IXGRP) || 103 if (buf.st_mode & (S_IRGRP | S_IWGRP | S_IXGRP) ||
115 buf.st_mode & (S_IROTH | S_IWOTH | S_IXOTH)) { 104 buf.st_mode & (S_IROTH | S_IWOTH | S_IXOTH)) {
116 if (setmode) { 105 if (setmode) {
117 mode_t newmode = 0; 106 mode_t newmode = 0;
118 scr_LogPrint("Bad permissions [%s]", name); 107 scr_LogPrint(LPRINT_LOGNORM, "Bad permissions [%s]", name);
119 if (S_ISDIR(buf.st_mode)) 108 if (S_ISDIR(buf.st_mode))
120 newmode |= S_IXUSR; 109 newmode |= S_IXUSR;
121 newmode |= S_IRUSR | S_IWUSR; 110 newmode |= S_IRUSR | S_IWUSR;
122 if (chmod(name, newmode)) { 111 if (chmod(name, newmode)) {
123 scr_LogPrint("WARNING: Failed to correct permissions!"); 112 scr_LogPrint(LPRINT_LOGNORM, "WARNING: Failed to correct permissions!");
124 return 1; 113 return 1;
125 } 114 }
126 scr_LogPrint("Permissions have been corrected"); 115 scr_LogPrint(LPRINT_LOGNORM, "Permissions have been corrected");
127 } else { 116 } else {
128 scr_LogPrint("WARNING: Bad permissions [%s]", name); 117 scr_LogPrint(LPRINT_LOGNORM, "WARNING: Bad permissions [%s]", name);
129 return 1; 118 return 1;
130 } 119 }
131 } 120 }
132 121
133 return 0; 122 return 0;