special handling for cifs mount ipv6 literal #46; retain literal host
This commit is contained in:
parent
59fecbc965
commit
5801871bd3
|
@ -3,6 +3,7 @@
|
|||
[devmon 1.1.8] fix no error popup on --unmount-removable #42
|
||||
[devmon 1.1.8] improve --exec-on-unmount for mounted during startup
|
||||
[devmon 1.1.8] unset %d %l for --exec-on-unmount #56
|
||||
special handling for cifs mount ipv6 literal #46; retain literal host
|
||||
0.4.3 2013-12-09:
|
||||
fix default udevil.conf allowed_options missing fmask=0133 #35
|
||||
0.4.2 2013-12-04:
|
||||
|
|
33
src/udevil.c
33
src/udevil.c
|
@ -2627,7 +2627,7 @@ static int parse_network_url( const char* url, const char* fstype,
|
|||
{
|
||||
str[0] = '\0';
|
||||
if ( xurl[1] != '\0' )
|
||||
nm->host = g_strdup( xurl + 1 );
|
||||
nm->host = g_strdup_printf( "[%s]", xurl + 1 );
|
||||
if ( str[1] == ':' && str[2] != '\0' )
|
||||
nm->port = g_strdup( str + 1 );
|
||||
}
|
||||
|
@ -2690,11 +2690,23 @@ static int parse_network_url( const char* url, const char* fstype,
|
|||
}
|
||||
|
||||
// lookup ip
|
||||
if ( !( nm->ip = get_ip( nm->host ) ) || ( nm->ip && nm->ip[0] == '\0' ) )
|
||||
char* tmphost = g_strdup( nm->host );
|
||||
if ( tmphost && tmphost[0] == '[' && strchr( tmphost, ':' ) &&
|
||||
g_str_has_suffix( tmphost, "]" ) )
|
||||
{
|
||||
// ipv6 literal - strip [] for get_ip
|
||||
str = tmphost;
|
||||
tmphost = g_strdup( str + 1 );
|
||||
g_free( str );
|
||||
tmphost[strlen( tmphost ) - 1] = '\0';
|
||||
}
|
||||
if ( !( nm->ip = get_ip( tmphost ) ) || ( nm->ip && nm->ip[0] == '\0' ) )
|
||||
{
|
||||
wlog( _("udevil: error 36: lookup host '%s' failed\n"), nm->host, 2 );
|
||||
g_free( tmphost );
|
||||
goto _net_free;
|
||||
}
|
||||
g_free( tmphost );
|
||||
|
||||
// valid
|
||||
*netmount = nm;
|
||||
|
@ -3769,6 +3781,23 @@ _get_type:
|
|||
fstype = g_strdup( "fuse" );
|
||||
}
|
||||
|
||||
// add option ip= for cifs ipv6 literal
|
||||
if ( type == MOUNT_NET &&
|
||||
( !strcmp( fstype, "smbfs" ) || !strcmp( fstype, "cifs" ) ) )
|
||||
{
|
||||
if ( netmount->host && netmount->host[0] == '[' &&
|
||||
strchr( netmount->host, ':' ) &&
|
||||
g_str_has_suffix( netmount->host, "]" ) )
|
||||
{
|
||||
// ipv6 literal as host - cifs requires special ip= option
|
||||
// This is done after valid options test since ip= should not be
|
||||
// an allowed option
|
||||
str = options;
|
||||
options = g_strdup_printf( "%s,ip=%s", str, netmount->ip );
|
||||
g_free( str );
|
||||
}
|
||||
}
|
||||
|
||||
// no point and not remount
|
||||
if ( !data->point && !remount )
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue
Block a user