#include "security.h"
#include "security-util.h"
#include "stream.h"
-#include "version.h"
#ifndef SO_RCVBUF
#undef DUMPER_SOCKET_BUFFERING
"BSDUDP",
bsdudp_connect,
bsdudp_accept,
+ sec_get_authenticated_peer_name_hostname,
bsdudp_close,
udpbsd_sendpkt,
udp_recvpkt,
void * datap)
{
struct sec_handle *bh;
- struct servent *se;
in_port_t port;
struct timeval sequence_time;
int sequence;
char *canonname;
struct addrinfo *res = NULL, *res_addr;
int result_bind;
+ char *service;
(void)conf_fn; /* Quiet unused parameter warning */
(void)datap; /* Quiet unused parameter warning */
assert(hostname != NULL);
- bh = alloc(sizeof(*bh));
+ bh = g_new0(struct sec_handle, 1);
bh->proto_handle=NULL;
bh->rc = NULL;
security_handleinit(&bh->sech, &bsdudp_security_driver);
bh->udp = &netfd4;
auth_debug(1, _("Resolved hostname=%s\n"), canonname);
- if ((se = getservbyname(AMANDA_SERVICE_NAME, "udp")) == NULL)
- port = AMANDA_SERVICE_DEFAULT;
- else
- port = (in_port_t)ntohs(se->s_port);
+ if (conf_fn) {
+ service = conf_fn("client_port", datap);
+ if (!service || strlen(service) <= 1)
+ service = "amanda";
+ } else {
+ service = "amanda";
+ }
+ port = find_port_for_service(service, "udp");
+ if (port == 0) {
+ security_seterror(&bh->sech, _("%s/udp unknown protocol"), service);
+ (*fn)(arg, &bh->sech, S_ERROR);
+ amfree(canonname);
+ return;
+ }
+
amanda_gettimeofday(&sequence_time);
sequence = (int)sequence_time.tv_sec ^ (int)sequence_time.tv_usec;
handle=alloc(15);