]> err.no Git - backuppcd/blob - backuppcd-notify.c
Import gnulib stuff
[backuppcd] / backuppcd-notify.c
1 #include "compat.h"
2 #include "net.h"
3
4 #ifdef HAVE_SYS_SOCKET_H
5 #include <sys/socket.h>
6 #endif
7 #ifdef HAVE_SYS_TYPES_H
8 #include <sys/types.h>
9 #endif
10
11 #ifndef HOST_NAME_MAX
12 #define HOST_NAME_MAX 255
13 #endif
14
15 void backuppc_notify(const char *host, const int port, const char *overridehostname) {
16         static char *hostname = NULL;
17         char cmdbuf[8192], *cmdbuf_p;
18         size_t hostname_len;
19         ssize_t send_ret;
20         int chk_ret;
21         int sockfd;
22
23         if (!host || port <= 0) {
24                 return;
25         }
26
27         if (overridehostname) {
28                 hostname = (char *) overridehostname;
29         }
30
31         if (!hostname) {
32                 hostname_len = HOST_NAME_MAX + 1;
33                 hostname = malloc(hostname_len);
34                 if (hostname) {
35                         chk_ret = gethostname(hostname, hostname_len);
36                         if (chk_ret < 0) {
37                                 free(hostname);
38                                 hostname = NULL;
39                         }
40                 }
41         }
42
43         if (!hostname) {
44                 return;
45         }
46
47         sockfd = net_connect_tcp(host, port);
48         if (sockfd >= 0) {
49                 /* XXX: Authentiation ? */
50
51                 /* Send hostname */
52                 chk_ret = snprintf(cmdbuf, sizeof(cmdbuf), "HOST %s\n", hostname);
53                 if (chk_ret < sizeof(cmdbuf)) {
54                         cmdbuf_p = cmdbuf;
55
56                         while (chk_ret) {
57                                 send_ret = send(sockfd, cmdbuf_p, chk_ret, 0);
58
59                                 if (send_ret < 0) {
60                                         break;
61                                 }
62
63                                 cmdbuf_p += send_ret;
64                                 chk_ret -= send_ret;
65                         }
66                 }
67
68                 net_close(sockfd);
69         }
70
71         if (overridehostname) {
72                 hostname = NULL;
73         }
74
75         return;
76 }