Imported Upstream version 2.5.2p1
[debian/amanda] / common-src / security-util.h
index b1d8faa7a26480c7311695506e438659721dd652..9b2dcc47ce855249dacd6d3d37ed79da385cbf2b 100644 (file)
 #include "stream.h"
 #include "dgram.h"
 #include "queue.h"
+#include "conffile.h"
+#include "security.h"
+#include "event.h"
+
+#define auth_debug(i,x) do {           \
+       if ((i) <= debug_auth) {        \
+           dbprintf(x);                \
+       }                               \
+} while (0)
+
+
+#ifdef KRB5_SECURITY
+#  define KRB5_DEPRECATED 1
+#  ifndef KRB5_HEIMDAL_INCLUDES
+#    include <gssapi/gssapi_generic.h>
+#  else
+#    include <gssapi/gssapi.h>
+#  endif
+#  include <krb5.h>
+#endif
 
 struct sec_handle;
 
@@ -56,12 +76,16 @@ struct tcp_conn {
     int                        refcnt;                 /* number of handles using */
     int                        handle;                 /* last proto handle read */
     void               (*accept_fn)(security_handle_t *, pkt_t *);
-    struct sockaddr_in peer;
+    struct sockaddr_storage    peer;
     TAILQ_ENTRY(tcp_conn) tq;                  /* queue handle */
     int                        (*recv_security_ok)(struct sec_handle *, pkt_t *);
     char *             (*prefix_packet)(void *, pkt_t *);
     int                        toclose;
     int                        donotclose;
+    int                        auth;
+#ifdef KRB5_SECURITY
+    gss_ctx_id_t       gss_context;
+#endif
 };
 
 
@@ -83,7 +107,7 @@ struct sec_handle {
     } fn;
     void *             arg;            /* argument to pass function */
     event_handle_t *   ev_timeout;     /* timeout handle for recv */
-    struct sockaddr_in peer;
+    struct sockaddr_storage    peer;
     int                        sequence;
     event_id_t         event_id;
     char *             proto_handle;
@@ -139,7 +163,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_in peer;   /* who sent it to us */
+    struct sockaddr_storage 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 */
@@ -200,8 +224,8 @@ int tcpm_stream_write(void *, const void *, size_t);
 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(int, int, char **, const void *, size_t);
-ssize_t        tcpm_recv_token(int, int *, char **, char **, ssize_t *, int);
+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);
 void   tcpm_close_connection(void *, char *);
 
 int    tcpma_stream_accept(void *);
@@ -225,8 +249,8 @@ void        udp_recvpkt(void *, void (*)(void *, pkt_t *, security_status_t),
 void   udp_recvpkt_cancel(void *);
 void   udp_recvpkt_callback(void *);
 void   udp_recvpkt_timeout(void *);
-int    udp_inithandle(udp_handle_t *, struct sec_handle *, struct hostent *,
-                       in_port_t, char *, int);
+int    udp_inithandle(udp_handle_t *, struct sec_handle *, char *hostname,
+                      struct sockaddr_storage *, in_port_t, char *, int);
 void   udp_netfd_read_callback(void *);
 
 struct tcp_conn *sec_tcp_conn_get(const char *, int);
@@ -241,7 +265,7 @@ char *      check_user_ruserok    (const char *host,
                                struct passwd *pwd,
                                const char *user);
 char * check_user_amandahosts(const char *host,
-                               struct in_addr addr,
+                               struct sockaddr_storage *addr,
                                struct passwd *pwd,
                                const char *user,
                                const char *service);
@@ -250,5 +274,11 @@ 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);
+int     check_addrinfo_give_name(struct addrinfo *res, const char *hostname,
+                                char **errstr);
+int    try_resolving_hostname(const char *hostname,
+                              char **cannonname);
 
 #endif /* _SECURITY_INFO_H */