]> arthur.barton.de Git - netatalk.git/blob - bin/nbp/nbprgstr.c
- merge branch-netatalk-afp-3x-dev, HEAD was tagged before
[netatalk.git] / bin / nbp / nbprgstr.c
1 /*
2  * $Id: nbprgstr.c,v 1.5 2005-04-28 20:49:20 bfernhomberg Exp $
3  *
4  * Copyright (c) 1990,1993 Regents of The University of Michigan.
5  * All Rights Reserved.  See COPYRIGHT.
6  */
7
8 #ifdef HAVE_CONFIG_H
9 #include "config.h"
10 #endif /* HAVE_CONFIG_H */
11
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <string.h>
15 #include <sys/types.h>
16 #include <sys/param.h>
17
18 #include <netatalk/endian.h>
19 #include <netatalk/at.h>
20 #include <atalk/netddp.h>
21 #include <atalk/nbp.h>
22 #include <atalk/util.h>
23 #include <atalk/unicode.h>
24
25 void Usage( av0 )
26     char        *av0;
27 {
28     char        *p;
29
30     if (( p = strrchr( av0, '/' )) == 0 ) {
31         p = av0;
32     } else {
33         p++;
34     }
35
36     fprintf( stderr, "Usage: %s [ -A address ] [-m Mac charset] [ -p port] obj:type@zone\n", p );
37     exit( 1 );
38 }
39
40 int main( ac, av )
41     int         ac;
42     char        **av;
43 {
44     struct sockaddr_at  addr;
45     struct at_addr      ataddr;
46     char                *Obj = 0, *Type = 0, *Zone = 0;
47     char                *convname = 0;
48     int                 s, c, port = 0;
49     charset_t           chMac = CH_MAC;
50     
51     extern char         *optarg;
52     extern int          optind;
53
54     memset(&ataddr, 0, sizeof(ataddr));
55     while (( c = getopt( ac, av, "p:A:m:" )) != EOF ) {
56         switch ( c ) {
57         case 'A':
58             if (!atalk_aton(optarg, &ataddr)) {
59                 fprintf(stderr, "Bad address.\n");
60                 exit(1);
61             }
62             break;
63
64         case 'm':
65             if ((charset_t)-1 == (chMac = add_charset(optarg)) ) {
66                 fprintf(stderr, "Invalid Mac charset.\n");
67                 exit(1);
68             }
69             break;
70
71         case 'p' :
72             port = atoi( optarg );
73             break;
74
75         default :
76             Usage( av[ 0 ] );
77         }
78     }
79
80     if ( ac - optind != 1 ) {
81         Usage( av[ 0 ] );
82     }
83
84     /* Convert the name */
85     if ((size_t)(-1) == convert_string_allocate(CH_UNIX, chMac,
86                         av[optind], strlen(av[optind]), &convname))
87         convname = av[optind];
88
89     /*
90      * Get the name. If Type or Obj aren't specified, error.
91      */
92     if ( nbp_name( convname, &Obj, &Type, &Zone ) || !Obj || !Type ) {
93         Usage( av[ 0 ] );
94     }
95
96     memset(&addr, 0, sizeof(addr));
97     memcpy(&addr.sat_addr, &ataddr, sizeof(addr.sat_addr));
98     if ((s = netddp_open(&addr, NULL)) < 0)
99         return( -1 );
100
101     if ( port ) {
102         addr.sat_port = port;
103     }
104
105     if ( nbp_rgstr( &addr, Obj, Type, Zone ) < 0 ) {
106         perror( "nbp_rgstr" );
107         fprintf( stderr, "Can't register %s:%s@%s\n", Obj, Type,
108                 Zone ? Zone : "*" );
109         exit( 1 );
110     }
111     netddp_close(s);
112
113     return 0;
114 }