Rewrite examples to more simple format.
[platform/upstream/cryptsetup.git] / docs / examples / crypt_log_usage.c
1 #include <stdio.h>
2 #include <sys/types.h>
3 #include <syslog.h>
4 #include <unistd.h>
5 #include <libcryptsetup.h>
6
7 /*
8  * This is an example of function that can be registered using crypt_set_log_callback API.
9  *
10  * Its prototype is void (*log)(int level, const char *msg, void *usrptr) as defined
11  * in crypt_set_log_callback
12  */
13 static void simple_syslog_wrapper(int level, const char *msg, void *usrptr)
14 {
15         const char *prefix = (const char *)usrptr;
16         int priority;
17
18         switch(level) {
19                 case CRYPT_LOG_NORMAL:  priority = LOG_NOTICE; break;
20                 case CRYPT_LOG_ERROR:   priority = LOG_ERR;    break;
21                 case CRYPT_LOG_VERBOSE: priority = LOG_INFO;   break;
22                 case CRYPT_LOG_DEBUG:   priority = LOG_DEBUG;  break;
23                 default:
24                         fprintf(stderr, "Unsupported log level requested!\n");
25                         return;
26         }
27
28         if (prefix)
29                 syslog(priority, "%s:%s", prefix, msg);
30         else
31                 syslog(priority, "%s", msg);
32 }
33
34 int main(void)
35 {
36         struct crypt_device *cd;
37         char usrprefix[] = "cslog_example";
38         int r;
39
40         if (geteuid()) {
41                 printf("Using of libcryptsetup requires super user privileges.\n");
42                 return 1;
43         }
44
45         openlog("cryptsetup", LOG_CONS | LOG_PID, LOG_USER);
46
47         /* Initialize empty crypt device context */
48         r = crypt_init(&cd, NULL);
49         if (r < 0) {
50                 printf("crypt_init() failed.\n");
51                 return 2;
52         }
53
54         /* crypt_set_log_callback() - register a log function for crypt context */
55         crypt_set_log_callback(cd, &simple_syslog_wrapper, (void *)usrprefix);
56
57         /* send messages ithrough the crypt_log() interface */
58         crypt_log(cd, CRYPT_LOG_NORMAL, "This is normal log message");
59         crypt_log(cd, CRYPT_LOG_ERROR, "This is error log message");
60         crypt_log(cd, CRYPT_LOG_VERBOSE, "This is verbose log message");
61         crypt_log(cd, CRYPT_LOG_DEBUG, "This is debug message");
62
63         /* release crypt context */
64         crypt_free(cd);
65
66         /* Initialize default (global) log function */
67         crypt_set_log_callback(NULL, &simple_syslog_wrapper, NULL);
68
69         crypt_log(NULL, CRYPT_LOG_NORMAL, "This is normal log message");
70         crypt_log(NULL, CRYPT_LOG_ERROR, "This is error log message");
71         crypt_log(NULL, CRYPT_LOG_VERBOSE, "This is verbose log message");
72         crypt_log(NULL, CRYPT_LOG_DEBUG, "This is debug message");
73
74         closelog();
75         return 0;
76 }