Example #1
0
/*
 * read rc file as follows:
 * 1. read [default] section
 * 2. override with [server] section
 * 3. override with [server:user:share] section
 * Since abcence of rcfile is not fatal, silently ignore this fact.
 * smb_rc file should be closed by caller.
 */
int
smb_ctx_readrc(struct smb_ctx *ctx)
{
	char sname[SMB_MAXSRVNAMELEN + SMB_MAXUSERNAMELEN + SMB_MAXSHARENAMELEN + 4];
/*	char *p;*/

	if (smb_open_rcfile() != 0)
		return 0;

	if (ctx->ct_ssn.ioc_user[0] == 0 || ctx->ct_ssn.ioc_srvname[0] == 0)
		return 0;

	smb_ctx_readrcsection(ctx, "default", 0);
	nb_ctx_readrcsection(smb_rc, ctx->ct_nb, "default", 0);
	smb_ctx_readrcsection(ctx, ctx->ct_ssn.ioc_srvname, 1);
	nb_ctx_readrcsection(smb_rc, ctx->ct_nb, ctx->ct_ssn.ioc_srvname, 1);
	/*
	 * SERVER:USER parameters
	 */
	snprintf(sname, sizeof(sname), "%s:%s", ctx->ct_ssn.ioc_srvname,
	    ctx->ct_ssn.ioc_user);
	smb_ctx_readrcsection(ctx, sname, 2);

	if (ctx->ct_sh.ioc_share[0] != 0) {
		/*
		 * SERVER:USER:SHARE parameters
	         */
		snprintf(sname, sizeof(sname), "%s:%s:%s", ctx->ct_ssn.ioc_srvname,
		    ctx->ct_ssn.ioc_user, ctx->ct_sh.ioc_share);
		smb_ctx_readrcsection(ctx, sname, 3);
	}
	return 0;
}
Example #2
0
int
cmd_lookup(int argc, char *argv[])
{
    struct nb_ctx *ctx;
    struct sockaddr *sap;
    char *hostname;
    int error, opt;

    if (argc < 2)
        lookup_usage();
    error = nb_ctx_create(&ctx);
    if (error) {
        smb_error("unable to create nbcontext", error);
        exit(1);
    }
    if (smb_open_rcfile() == 0) {
        if (nb_ctx_readrcsection(smb_rc, ctx, "default", 0) != 0)
            exit(1);
        rc_close(smb_rc);
    }
    while ((opt = getopt(argc, argv, "w:")) != EOF) {
        switch(opt) {
        case 'w':
            nb_ctx_setns(ctx, optarg);
            break;
        default:
            lookup_usage();
            /*NOTREACHED*/
        }
    }
    if (optind >= argc)
        lookup_usage();
    if (nb_ctx_resolve(ctx) != 0)
        exit(1);
    hostname = argv[argc - 1];
    /*	printf("Looking for %s...\n", hostname);*/
    error = nbns_resolvename(hostname, ctx, &sap);
    if (error) {
        smb_error("unable to resolve %s", error, hostname);
        exit(1);
    }
    printf("Got response from %s\n", inet_ntoa(ctx->nb_lastns.sin_addr));
    printf("IP address of %s: %s\n", hostname, inet_ntoa(((struct sockaddr_in*)sap)->sin_addr));
    return 0;
}