Lines Matching +full:slave +full:- +full:addr
2 * Copyright (c) 1997 - 2008 Kungliga Tekniska Högskolan
52 struct sockaddr_un addr; in make_signal_socket() local
61 memset (&addr, 0, sizeof(addr)); in make_signal_socket()
62 addr.sun_family = AF_UNIX; in make_signal_socket()
63 strlcpy (addr.sun_path, fn, sizeof(addr.sun_path)); in make_signal_socket()
64 unlink (addr.sun_path); in make_signal_socket()
65 if (bind (fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) in make_signal_socket()
66 krb5_err (context, 1, errno, "bind %s", addr.sun_path); in make_signal_socket()
74 fd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); in make_signal_socket()
76 krb5_err (context, 1, rk_SOCK_ERRNO, "socket AF=%d", ai->ai_family); in make_signal_socket()
78 if (rk_IS_SOCKET_ERROR( bind (fd, ai->ai_addr, ai->ai_addrlen) )) in make_signal_socket()
89 struct sockaddr_in addr; in make_listen_socket() local
95 memset (&addr, 0, sizeof(addr)); in make_listen_socket()
96 addr.sin_family = AF_INET; in make_listen_socket()
99 addr.sin_port = krb5_getportbyname (context, in make_listen_socket()
102 if (addr.sin_port == 0) { in make_listen_socket()
109 addr.sin_port = htons(port); in make_listen_socket()
112 addr.sin_port = krb5_getportbyname (context, IPROP_SERVICE, in make_listen_socket()
115 if(bind(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) in make_listen_socket()
127 struct sockaddr_in6 addr; in make_listen6_socket() local
133 memset (&addr, 0, sizeof(addr)); in make_listen6_socket()
134 addr.sin6_family = AF_INET6; in make_listen6_socket()
137 addr.sin6_port = krb5_getportbyname (context, in make_listen6_socket()
140 if (addr.sin6_port == 0) { in make_listen6_socket()
147 addr.sin6_port = htons(port); in make_listen6_socket()
150 addr.sin6_port = krb5_getportbyname (context, IPROP_SERVICE, in make_listen6_socket()
153 if(bind(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) in make_listen6_socket()
169 struct slave { struct
171 union sockaddr_union addr; member
179 struct slave *next; argument
182 typedef struct slave slave; typedef
193 if (asprintf(&slavefile, "%s/slaves", hdb_db_dir(context)) == -1 in check_acl()
201 "iprop-acl", in check_acl()
220 slave_seen(slave *s) in slave_seen()
222 s->flags &= ~SLAVE_F_AYT; in slave_seen()
223 s->seen = time(NULL); in slave_seen()
227 slave_missing_p (slave *s) in slave_missing_p()
229 if (time(NULL) > s->seen + time_before_missing) in slave_missing_p()
235 slave_gone_p (slave *s) in slave_gone_p()
237 if (time(NULL) > s->seen + time_before_gone) in slave_gone_p()
243 slave_dead(krb5_context context, slave *s) in slave_dead()
245 krb5_warnx(context, "slave %s dead", s->name); in slave_dead()
247 if (!rk_IS_BAD_SOCKET(s->fd)) { in slave_dead()
248 rk_closesocket (s->fd); in slave_dead()
249 s->fd = rk_INVALID_SOCKET; in slave_dead()
251 s->flags |= SLAVE_F_DEAD; in slave_dead()
256 remove_slave (krb5_context context, slave *s, slave **root) in remove_slave()
258 slave **p; in remove_slave()
260 if (!rk_IS_BAD_SOCKET(s->fd)) in remove_slave()
261 rk_closesocket (s->fd); in remove_slave()
262 if (s->name) in remove_slave()
263 free (s->name); in remove_slave()
264 if (s->ac) in remove_slave()
265 krb5_auth_con_free (context, s->ac); in remove_slave()
267 for (p = root; *p; p = &(*p)->next) in remove_slave()
269 *p = s->next; in remove_slave()
276 add_slave (krb5_context context, krb5_keytab keytab, slave **root, in add_slave()
281 slave *s; in add_slave()
291 s->name = NULL; in add_slave()
292 s->ac = NULL; in add_slave()
294 addr_len = sizeof(s->addr.sin6); in add_slave()
295 s->fd = accept (fd, (struct sockaddr *)&s->addr.sa, &addr_len); in add_slave()
296 if (rk_IS_BAD_SOCKET(s->fd)) { in add_slave()
312 ret = krb5_recvauth (context, &s->ac, &s->fd, in add_slave()
319 ret = krb5_unparse_name (context, ticket->client, &s->name); in add_slave()
325 if (check_acl (context, s->name)) { in add_slave()
326 krb5_warnx (context, "%s not in acl", s->name); in add_slave()
331 slave *l = *root; in add_slave()
334 if (strcmp(l->name, s->name) == 0) in add_slave()
336 l = l->next; in add_slave()
339 if (l->flags & SLAVE_F_DEAD) { in add_slave()
342 krb5_warnx (context, "second connection from %s", s->name); in add_slave()
348 krb5_warnx (context, "connection from %s", s->name); in add_slave()
350 s->version = 0; in add_slave()
351 s->flags = 0; in add_slave()
353 s->next = *root; in add_slave()
371 struct slave *s = (struct slave *)v; in prop_one()
373 ret = hdb_entry2value (context, &entry->entry, &data); in prop_one()
381 memmove ((char *)data.data + 4, data.data, data.length - 4); in prop_one()
390 ret = krb5_write_priv_message (context, s->ac, &s->fd, &data); in prop_one()
396 send_complete (krb5_context context, slave *s, in send_complete()
408 ret = db->hdb_open (context, db, O_RDONLY, 0); in send_complete()
410 krb5_err (context, 1, ret, "db->open"); in send_complete()
421 ret = krb5_write_priv_message(context, s->ac, &s->fd, &data); in send_complete()
436 (*db->hdb_close)(context, db); in send_complete()
437 (*db->hdb_destroy)(context, db); in send_complete()
448 s->version = current_version; in send_complete()
450 ret = krb5_write_priv_message(context, s->ac, &s->fd, &data); in send_complete()
463 send_are_you_there (krb5_context context, slave *s) in send_are_you_there()
470 if (s->flags & (SLAVE_F_DEAD|SLAVE_F_AYT)) in send_are_you_there()
473 krb5_warnx(context, "slave %s missing, sending AYT", s->name); in send_are_you_there()
475 s->flags |= SLAVE_F_AYT; in send_are_you_there()
489 ret = krb5_write_priv_message(context, s->ac, &s->fd, &data); in send_are_you_there()
501 send_diffs (krb5_context context, slave *s, int log_fd, in send_diffs()
513 if (s->version == current_version) { in send_diffs()
514 krb5_warnx(context, "slave %s in sync already at version %ld", in send_diffs()
515 s->name, (long)s->version); in send_diffs()
519 if (s->flags & SLAVE_F_DEAD) in send_diffs()
522 /* if slave is a fresh client, starting over */ in send_diffs()
523 if (s->version == 0) { in send_diffs()
524 krb5_warnx(context, "sending complete log to fresh slave %s", in send_diffs()
525 s->name); in send_diffs()
536 left = krb5_storage_seek(sp, -16, SEEK_CUR); in send_diffs()
537 if (ver == s->version) in send_diffs()
539 if (ver == s->version + 1) in send_diffs()
544 "slave %s (version %lu) out of sync with master " in send_diffs()
546 s->name, (unsigned long)s->version, (unsigned long)ver); in send_diffs()
552 "syncing slave %s from version %lu to version %lu", in send_diffs()
553 s->name, (unsigned long)s->version, in send_diffs()
556 ret = krb5_data_alloc (&data, right - left + 4); in send_diffs()
563 krb5_storage_read (sp, (char *)data.data + 4, data.length - 4); in send_diffs()
575 ret = krb5_write_priv_message(context, s->ac, &s->fd, &data); in send_diffs()
585 s->version = current_version; in send_diffs()
591 process_msg (krb5_context context, slave *s, int log_fd, in process_msg()
599 ret = krb5_read_priv_message(context, s->ac, &s->fd, &out); in process_msg()
601 krb5_warn (context, ret, "error reading message from %s", s->name); in process_msg()
623 /* new started slave that have old log */ in process_msg()
624 if (s->version == 0 && tmp != 0) { in process_msg()
626 krb5_warnx (context, "Slave %s (version %lu) have later version " in process_msg()
628 s->name, (unsigned long)tmp, in process_msg()
631 s->version = tmp; in process_msg()
633 if ((uint32_t)tmp < s->version) { in process_msg()
634 krb5_warnx (context, "Slave claims to not have " in process_msg()
673 asprintf(&statfile, "%s/slaves-stats", hdb_db_dir(context)); in open_stats()
678 "iprop-stats", in open_stats()
705 write_stats(krb5_context context, slave *slaves, uint32_t current_version) in write_stats()
737 krb5_address addr; in write_stats() local
739 rtbl_add_column_entry(tbl, SLAVE_NAME, slaves->name); in write_stats()
741 (struct sockaddr*)&slaves->addr.sa, &addr); in write_stats()
743 krb5_print_address(&addr, str, sizeof(str), NULL); in write_stats()
744 krb5_free_address(context, &addr); in write_stats()
749 snprintf(str, sizeof(str), "%u", (unsigned)slaves->version); in write_stats()
752 if (slaves->flags & SLAVE_F_DEAD) in write_stats()
757 ret = krb5_format_time(context, slaves->seen, str, sizeof(str), TRUE); in write_stats()
759 rtbl_add_column_entry(tbl, SLAVE_SEEN, "<error-formatting-time>"); in write_stats()
763 slaves = slaves->next; in write_stats()
786 { "config-file", 'c', arg_string, &config_file, NULL, NULL },
791 { "slave-stats-file", 0, arg_string, rk_UNCONST(&slave_stats_file),
792 "file for slave status information", "file"},
793 { "time-missing", 0, arg_string, rk_UNCONST(&slave_time_missing),
794 "time before slave is polled for presence", "time"},
795 { "time-gone", 0, arg_string, rk_UNCONST(&slave_time_gone),
796 "time of inactivity after which a slave is considered gone", "time"},
820 slave *slaves = NULL; in main()
864 krb5_openlog (context, "ipropd-master", &log_facility); in main()
891 log_fd = open (server_context->log_context.log_file, O_RDONLY, 0); in main()
894 server_context->log_context.log_file); in main()
902 krb5_warnx(context, "ipropd-master started at version: %lu", in main()
906 slave *p; in main()
926 for (p = slaves; p != NULL; p = p->next) { in main()
927 if (p->flags & SLAVE_F_DEAD) in main()
929 FD_SET(p->fd, &readset); in main()
930 max_fd = max(max_fd, p->fd); in main()
951 for (p = slaves; p != NULL; p = p->next) { in main()
952 if (p->flags & SLAVE_F_DEAD) in main()
972 --ret; in main()
981 for (p = slaves; p != NULL; p = p->next) { in main()
982 if (p->flags & SLAVE_F_DEAD) in main()
993 for(p = slaves; p != NULL; p = p->next) { in main()
994 if (p->flags & SLAVE_F_DEAD) in main()
996 if (ret && FD_ISSET(p->fd, &readset)) { in main()
997 --ret; in main()
1009 --ret; in main()
1014 --ret; in main()