X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fnetwork%2Facl.c;h=f10ec64152e87ec3a959825cd497a865a828d00a;hb=5a5cbadd836de42cb1655e65e2353edfd9241db1;hp=58e684d121fe92713eb71ef42f08d5c0c82e0db4;hpb=c8075f3500bfdd1e4159f5091c767bcd916f0e26;p=vlc diff --git a/src/network/acl.c b/src/network/acl.c index 58e684d121..f10ec64152 100644 --- a/src/network/acl.c +++ b/src/network/acl.c @@ -28,15 +28,13 @@ # include "config.h" #endif -#include +#include #include #include -#include - #include -#include +#include /* FIXME: rwlock on acl, but libvlc doesn't implement rwlock */ typedef struct vlc_acl_entry_t @@ -201,7 +199,7 @@ int ACL_AddNet( vlc_acl_t *p_acl, const char *psz_ip, int i_len, return 0; } - +#undef ACL_Create /** * Creates an empty ACL. * @@ -210,7 +208,7 @@ int ACL_AddNet( vlc_acl_t *p_acl, const char *psz_ip, int i_len, * * @return an ACL object. NULL in case of error. */ -vlc_acl_t *__ACL_Create( vlc_object_t *p_this, bool b_allow ) +vlc_acl_t *ACL_Create( vlc_object_t *p_this, bool b_allow ) { vlc_acl_t *p_acl; @@ -218,7 +216,7 @@ vlc_acl_t *__ACL_Create( vlc_object_t *p_this, bool b_allow ) if( p_acl == NULL ) return NULL; - vlc_object_yield( p_this ); + vlc_object_hold( p_this ); p_acl->p_owner = p_this; p_acl->i_size = 0; p_acl->p_entries = NULL; @@ -227,7 +225,7 @@ vlc_acl_t *__ACL_Create( vlc_object_t *p_this, bool b_allow ) return p_acl; } - +#undef ACL_Duplicate /** * Perform a deep copy of an existing ACL. * @@ -236,7 +234,7 @@ vlc_acl_t *__ACL_Create( vlc_object_t *p_this, bool b_allow ) * * @return a new ACL object, or NULL on error. */ -vlc_acl_t *__ACL_Duplicate( vlc_object_t *p_this, const vlc_acl_t *p_acl ) +vlc_acl_t *ACL_Duplicate( vlc_object_t *p_this, const vlc_acl_t *p_acl ) { vlc_acl_t *p_dupacl; @@ -264,7 +262,7 @@ vlc_acl_t *__ACL_Duplicate( vlc_object_t *p_this, const vlc_acl_t *p_acl ) else p_dupacl->p_entries = NULL; - vlc_object_yield( p_this ); + vlc_object_hold( p_this ); p_dupacl->p_owner = p_this; p_dupacl->i_size = p_acl->i_size; p_dupacl->b_allow_default = p_acl->b_allow_default; @@ -280,9 +278,7 @@ void ACL_Destroy( vlc_acl_t *p_acl ) { if( p_acl != NULL ) { - if( p_acl->p_entries != NULL ) - free( p_acl->p_entries ); - + free( p_acl->p_entries ); vlc_object_release( p_acl->p_owner ); free( p_acl ); } @@ -304,7 +300,7 @@ int ACL_LoadFile( vlc_acl_t *p_acl, const char *psz_path ) if( p_acl == NULL ) return -1; - file = utf8_fopen( psz_path, "r" ); + file = vlc_fopen( psz_path, "r" ); if( file == NULL ) return -1; @@ -335,7 +331,7 @@ int ACL_LoadFile( vlc_acl_t *p_acl, const char *psz_path ) continue; ptr = strchr( psz_ip, '\n' ); - if( ptr == NULL ) + if( ptr == NULL && !feof(file) ) { msg_Warn( p_acl->p_owner, "skipping overly long line in %s", psz_path); @@ -356,16 +352,15 @@ int ACL_LoadFile( vlc_acl_t *p_acl, const char *psz_path ) continue; /* skip unusable line */ } - /* skips comment-only line */ - if( *psz_ip == '#' ) - continue; - - /* looks for first space, CR, LF, etc. or end-of-line comment */ - /* (there is at least a linefeed) */ - for( ptr = psz_ip; ( *ptr != '#' ) && !isspace( *ptr ); ptr++ ); + /* look for first space, CR, LF, etc. or comment character */ + for( ptr = psz_ip; ( *ptr!='#' ) && !isspace( *ptr ) && *ptr; ++ptr ); *ptr = '\0'; + /* skip lines without usable information */ + if( ptr == psz_ip ) + continue; + msg_Dbg( p_acl->p_owner, "restricted to %s", psz_ip ); ptr = strchr( psz_ip, '/' ); @@ -377,7 +372,7 @@ int ACL_LoadFile( vlc_acl_t *p_acl, const char *psz_path ) : ACL_AddHost( p_acl, psz_ip, true ) ) { msg_Err( p_acl->p_owner, "cannot add ACL from %s", psz_path ); - goto error; + continue; } }