/* ------------------------------------------------------ ** * smb_url.c * ------------------------------------------------------ ** */ #include <stdio.h> #include <string.h> #include "smb_url.h" smb_url *smb_urlParse( char *src, smb_url *url ) /* ---------------------------------------------------- ** * Parse an SMB URL string into an smb_url structure. * * This is a very, very simplistic URL parser...just * enough for demonstration purposes. * It does not handle the full syntax of SMB URLs. * It only handles absolute URLs, and does not do * enough error checking. You can certainly do better, * and superior examples can be found on on the web. * * The function returns NULL on error. * ---------------------------------------------------- ** */ { int pos; uchar *p; /* Clear the smb_url structure first. */ (void)memset( url, 0, sizeof( smb_url ) ); /* Check for a correct prefix. */ pos = 0; if( 0 == strncasecmp( "smb://", src, 6 ) ) pos = 6; else if( 0 == strncasecmp( "cifs://", src, 7 ) ) pos = 7; else return( NULL ); /* Check for an empty URL ("smb://"). */ if( '\0' == src[pos] ) return( url ); /* Copy the original string so that we can carve it up. */ src = strdup( &src[pos] ); /* Separate the server, share, path & context * components. */ url->server = src; /* Look for context. */ p = strrchr( src, '?' ); if( NULL != p ) { *p = '\0'; url->context = ++p; } /* Share part next. */ p = strchr( src, '/' ); if( NULL != p ) { *p = '\0'; url->share = ++p; /* path part. */ p = strchr( p, '/' ); if( NULL != p ) { *p = '\0'; url->path = ++p; } } /* Look for the ntdomain & username subfields * in the server string (the Authority field). */ p = strchr( url->server, '@' ); if( NULL != p ) { *p = '\0'; url->user = url->server; url->server = ++p; /* Split the user field into ntdomain;user */ p = strchr( url->user, ';' ); if( NULL != p ) { *p = '\0'; url->ntdomain = url->user; url->user = ++p; } } /* Look for a port number in the server string. */ p = strchr( url->server, ':' ); if( NULL != p ) { *p = '\0'; url->port = ++p; } return( url ); } /* smb_urlParse */ void smb_urlContent( smb_url *url ) /* ---------------------------------------------------- ** * Dump the contents of an smb_url structure, * representing a parsed SMB URL string. * ---------------------------------------------------- ** */ { if( url->ntdomain ) (void)printf( "ntdomain: %s\n", url->ntdomain ); if( url->user ) (void)printf( " user: %s\n", url->user ); if( url->server ) (void)printf( " server: %s\n", url->server ); if( url->port ) (void)printf( " port: %s\n", url->port ); if( url->share ) (void)printf( " share: %s\n", url->share ); if( url->path ) (void)printf( " path: %s\n", url->path ); if( url->context ) (void)printf( " context: %s\n", url->context ); } /* smb_urlContent */ /* ------------------------------------------------------ */
$Revision: 1.4 $ $Date: 2003/05/22 20:40:46 $ |
Copyright © 2002 Christopher R. Hertel Released under the terms of the LGPL |