*** /dev/null Sat Nov 23 01:02:23 2024
--- - Sat Nov 23 01:02:24 2024
***************
*** 0 ****
--- 1,80 ----
+
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <stdarg.h>
+ #include <time.h>
+ #include <syslog.h>
+ #include <sys/utsname.h>
+
+ #include "sa.h"
+
+ /* see RFC3164 */
+
+ static void die(char *fmt, ...)
+ {
+ va_list ap;
+
+ va_start(ap, fmt);
+ fprintf(stderr, "test:ERROR: ");
+ vfprintf(stderr, fmt, ap);
+ fprintf(stderr, "\n");
+ va_end(ap);
+ exit(1);
+ }
+
+ int main(int argc, char *argv[])
+ {
+ sa_addr_t *ra;
+ sa_addr_t *la;
+ sa_t *sa;
+ char caBuf[1024];
+ int nBuf;
+ char caTime[15+1];
+ time_t now;
+ struct tm *tm;
+ char caHost;
+ struct utsname uts;
+ char *cp;
+ char caTag[32+1];
+ char *cpHost;
+ int n;
+
+ if (sa_u2a(&ra, "udp://%s:514", argv[1]) != SA_OK)
+ die("sa_u2a ra");
+ if (sa_u2a(&la, "udp://0.0.0.0:0") != SA_OK)
+ die("sa_u2a la");
+ if (sa_create(&sa) != SA_OK)
+ die("sa_create");
+ if (sa_bind(sa, la) != SA_OK)
+ die("sa_bind");
+
+ /* RFC3164: The BSD syslog Protocol; C. Lonvick; August 2001. */
+
+ now = time(NULL);
+ tm = localtime(&now);
+ strftime(caTime, sizeof(caTime), "%b %e %H:%M:%S", tm);
+
+ if (uname(&uts) == 0) {
+ cpHost = strdup(uts.nodename);
+ if ((cp = strchr(cpHost, '.')) != NULL)
+ *cp = '\0';
+ }
+ else
+ cpHost = strdup("0.0.0.0"); /* FIXME */
+
+ strcpy(caTag, "progname[12]: ");
+ if (strlen(caTag) > 32)
+ caTag[32] = '\0';
+
+ sprintf(caBuf, "<%d>%s %s %s%s", LOG_MAIL|LOG_EMERG, caTime, cpHost, caTag, argv[2]);
+ fprintf(stderr, "%s\n", caBuf);
+ nBuf = strlen(caBuf);
+ if (sa_writeto(sa, caBuf, nBuf, &n, ra) != SA_OK)
+ die("sa_writeto");
+ if (sa_destroy(sa) != SA_OK)
+ die("sa_destroy");
+ free(ra);
+ free(la);
+ return 0;
+ }
+
|