示例#1
0
static int dsi_parse_uams(struct afp_server * server, char * msg) 
{
	unsigned char num_uams = msg[0];
	unsigned char len;
	int i;
	char * p;
	char ua_name[AFP_UAM_LENGTH+1];

	server->supported_uams= 0;

	memset(ua_name,0,AFP_UAM_LENGTH+1);

	if (num_uams > SERVER_MAX_UAMS) num_uams = SERVER_MAX_UAMS;
	p=msg+1;
	for (i=0;i<num_uams;i++) {
		len=copy_from_pascal(ua_name,p,AFP_UAM_LENGTH)+1;
		server->supported_uams|=uam_string_to_bitmap(ua_name);
		p+=len;
	}
	
	return 0;

}
示例#2
0
文件: afp_url.c 项目: 007/afpfs-ng
static int check_uamname(const char * uam) 
{
	return !uam_string_to_bitmap(uam);
}
示例#3
0
文件: client.c 项目: 007/afpfs-ng
static int do_mount(int argc, char ** argv) 
{
        int c;
        int option_index=0;
	struct afp_server_mount_request * req;
	int optnum;
	unsigned int uam_mask=default_uams_mask();

	struct option long_options[] = {
		{"afpversion",1,0,'v'},
		{"volumepassword",1,0,'V'},
		{"user",1,0,'u'},
		{"pass",1,0,'p'},
		{"port",1,0,'o'},
		{"uam",1,0,'a'},
		{"map",1,0,'m'},
		{0,0,0,0},
	};

	if (argc<4) {
		usage();
		return -1;
	}

	outgoing_len=sizeof(struct afp_server_mount_request)+1;
	req = (void *) outgoing_buffer+1;
	memset(outgoing_buffer,0,outgoing_len);
	outgoing_buffer[0]=AFP_SERVER_COMMAND_MOUNT;
	req->url.port=548;
	req->map=AFP_MAPPING_UNKNOWN;

        while(1) {
		optnum++;
                c = getopt_long(argc,argv,"a:u:m:o:p:v:V:",
                        long_options,&option_index);
                if (c==-1) break;
                switch(c) {
                case 'a':
			if (strcmp(optarg,"guest")==0) 
				uam_mask=UAM_NOUSERAUTHENT;
			else
				uam_mask=uam_string_to_bitmap(optarg);
                        break;
                case 'm':
			req->map=map_string_to_num(optarg);
                        break;
                case 'u':
                        snprintf(req->url.username,AFP_MAX_USERNAME_LEN,"%s",optarg);
                        break;
                case 'o':
                        req->url.port=strtol(optarg,NULL,10);
                        break;
                case 'p':
                        snprintf(req->url.password,AFP_MAX_PASSWORD_LEN,"%s",optarg);
                        break;
                case 'V':
                        snprintf(req->url.volpassword,9,"%s",optarg);
                        break;
                case 'v':
                        req->url.requested_version=strtol(optarg,NULL,10);
                        break;
                }
        }

	if (strcmp(req->url.password, "-") == 0) {
		char *p = getpass("AFP Password: "******"%s",p);
	}
	if (strcmp(req->url.volpassword, "-") == 0) {
		char *p = getpass("Password for volume: ");
		if (p)
			snprintf(req->url.volpassword,9,"%s",p);
	}

	optnum=optind+1;
	if (optnum>=argc) {
		printf("No volume or mount point specified\n");
		return -1;
	}
	if (sscanf(argv[optnum++],"%[^':']:%[^':']",
		req->url.servername,req->url.volumename)!=2) {
		printf("Incorrect server:volume specification\n");
		return -1;
	}
	if (uam_mask==0) {
		printf("Unknown UAM\n");
		return -1;
	}

	req->uam_mask=uam_mask;
	req->volume_options=DEFAULT_MOUNT_FLAGS;

	if (optnum>=argc) {
		printf("No mount point specified\n");
		return -1;
	}

	snprintf(req->mountpoint,255,"%s",argv[optnum++]);


        return 0;
}