X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=common-src%2Fsecurity-util.h;h=9fa67701a6a48d53d3fa5a6382de3787daa5153f;hb=f8da3d96bb7fe9d1e74087295c5c39f53a3623ef;hp=dd1e3ccb9e5542b1d278eacb7a44b616d88d9231;hpb=94a044f90357edefa6f4ae9f0b1d5885b0e34aee;p=debian%2Famanda diff --git a/common-src/security-util.h b/common-src/security-util.h index dd1e3cc..9fa6770 100644 --- a/common-src/security-util.h +++ b/common-src/security-util.h @@ -34,7 +34,6 @@ #include "stream.h" #include "dgram.h" -#include "queue.h" #include "conffile.h" #include "security.h" #include "event.h" @@ -46,6 +45,12 @@ } while (0) +/* + * Magic values for sec_conn->handle + */ +#define H_TAKEN -1 /* sec_conn->tok was already read */ +#define H_EOF -2 /* this connection has been shut down */ + #ifdef KRB5_SECURITY # define KRB5_DEPRECATED 1 # ifndef KRB5_HEIMDAL_INCLUDES @@ -75,9 +80,9 @@ struct tcp_conn { char * errmsg; /* error passed up */ int refcnt; /* number of handles using */ int handle; /* last proto handle read */ + int event_id; /* event ID fired when token read */ void (*accept_fn)(security_handle_t *, pkt_t *); - struct sockaddr_storage peer; - TAILQ_ENTRY(tcp_conn) tq; /* queue handle */ + sockaddr_union peer; int (*recv_security_ok)(struct sec_handle *, pkt_t *); char * (*prefix_packet)(void *, pkt_t *); int toclose; @@ -85,9 +90,14 @@ struct tcp_conn { int auth; char * (*conf_fn)(char *, void *); void * datap; + time_t logstamp; #ifdef KRB5_SECURITY gss_ctx_id_t gss_context; #endif + unsigned int netint[2]; + char * buffer; + ssize_t size_header_read; + ssize_t size_buffer_read; }; @@ -109,7 +119,7 @@ struct sec_handle { } fn; void * arg; /* argument to pass function */ event_handle_t * ev_timeout; /* timeout handle for recv */ - struct sockaddr_storage peer; + sockaddr_union peer; int sequence; event_id_t event_id; char * proto_handle; @@ -140,24 +150,6 @@ struct sec_stream { int closed_by_network; }; -struct connq_s { - TAILQ_HEAD(, tcp_conn) tailq; - int qlength; -}; -extern struct connq_s connq; - -#define connq_first() TAILQ_FIRST(&connq.tailq) -#define connq_next(rc) TAILQ_NEXT(rc, tq) -#define connq_append(rc) do { \ - TAILQ_INSERT_TAIL(&connq.tailq, rc, tq); \ - connq.qlength++; \ -} while (0) -#define connq_remove(rc) do { \ - assert(connq.qlength > 0); \ - TAILQ_REMOVE(&connq.tailq, rc, tq); \ - connq.qlength--; \ -} while (0) - /* * This is data local to the datagram socket. We have one datagram * per process per auth. @@ -165,7 +157,7 @@ extern struct connq_s connq; typedef struct udp_handle { const struct security_driver *driver; /* MUST be first */ dgram_t dgram; /* datagram to read/write from */ - struct sockaddr_storage peer; /* who sent it to us */ + sockaddr_union peer; /* who sent it to us */ pkt_t pkt; /* parsed form of dgram */ char *handle; /* handle from recvd packet */ int sequence; /* seq no of packet */ @@ -230,7 +222,8 @@ void tcpm_stream_read(void *, void (*)(void *, void *, ssize_t), void *); ssize_t tcpm_stream_read_sync(void *, void **); void tcpm_stream_read_cancel(void *); ssize_t tcpm_send_token(struct tcp_conn *, int, int, char **, const void *, size_t); -ssize_t tcpm_recv_token(struct tcp_conn *, int, int *, char **, char **, ssize_t *, int); +ssize_t tcpm_recv_token_timeout(struct tcp_conn *, int, int *, char **, char **, ssize_t *, int); +ssize_t tcpm_recv_token(struct tcp_conn *, int, int *, char **, char **, ssize_t *); void tcpm_close_connection(void *, char *); int tcpma_stream_accept(void *); @@ -255,7 +248,7 @@ void udp_recvpkt_cancel(void *); void udp_recvpkt_callback(void *); void udp_recvpkt_timeout(void *); int udp_inithandle(udp_handle_t *, struct sec_handle *, char *hostname, - struct sockaddr_storage *, in_port_t, char *, int); + sockaddr_union *, in_port_t, char *, int); void udp_netfd_read_callback(void *); struct tcp_conn *sec_tcp_conn_get(const char *, int); @@ -270,16 +263,18 @@ char * check_user_ruserok (const char *host, struct passwd *pwd, const char *user); char * check_user_amandahosts(const char *host, - struct sockaddr_storage *addr, + sockaddr_union *addr, struct passwd *pwd, const char *user, const char *service); -ssize_t net_writev(int, struct iovec *, int); ssize_t net_read(int, void *, size_t, int); ssize_t net_read_fillbuf(int, int, void *, size_t); void show_stat_info(char *a, char *b); int check_name_give_sockaddr(const char *hostname, struct sockaddr *addr, char **errstr); +in_port_t find_port_for_service(char *service, char *proto); +char *sec_get_authenticated_peer_name_localhost(security_handle_t *); +char *sec_get_authenticated_peer_name_hostname(security_handle_t *); #endif /* _SECURITY_INFO_H */