From 5258ac0a83a91abeeba1f1d27888980bf78e14dd Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 2 Jul 2009 02:37:49 +0000 Subject: [PATCH] (trunk libT) #2234: add support for setting the file creation umask --- libtransmission/session.c | 12 ++++++++++-- libtransmission/session.h | 2 ++ libtransmission/transmission.h | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/libtransmission/session.c b/libtransmission/session.c index 1575777bd..033095576 100644 --- a/libtransmission/session.c +++ b/libtransmission/session.c @@ -15,8 +15,8 @@ #include /* memcpy */ #include -#include /* stat */ -#include /* stat */ +#include /* stat(), umask() */ +#include /* stat(), umask() */ #include /* stat */ #include /* opendir */ @@ -392,6 +392,7 @@ tr_sessionGetDefaultSettings( tr_benc * d ) tr_bencDictAddInt ( d, TR_PREFS_KEY_ALT_SPEED_TIME_DAY, TR_SCHED_ALL ); tr_bencDictAddInt ( d, TR_PREFS_KEY_USPEED, 100 ); tr_bencDictAddBool( d, TR_PREFS_KEY_USPEED_ENABLED, FALSE ); + tr_bencDictAddInt ( d, TR_PREFS_KEY_UMASK, 022 ); tr_bencDictAddInt ( d, TR_PREFS_KEY_UPLOAD_SLOTS_PER_TORRENT, 10 ); tr_bencDictAddStr ( d, TR_PREFS_KEY_BIND_ADDRESS_IPV4, TR_DEFAULT_BIND_ADDRESS_IPV4 ); tr_bencDictAddStr ( d, TR_PREFS_KEY_BIND_ADDRESS_IPV6, TR_DEFAULT_BIND_ADDRESS_IPV6 ); @@ -448,6 +449,7 @@ tr_sessionGetSettings( tr_session * s, struct tr_benc * d ) tr_bencDictAddInt ( d, TR_PREFS_KEY_ALT_SPEED_TIME_DAY, tr_sessionGetAltSpeedDay( s ) ); tr_bencDictAddInt ( d, TR_PREFS_KEY_USPEED, tr_sessionGetSpeedLimit( s, TR_UP ) ); tr_bencDictAddBool( d, TR_PREFS_KEY_USPEED_ENABLED, tr_sessionIsSpeedLimited( s, TR_UP ) ); + tr_bencDictAddInt ( d, TR_PREFS_KEY_UMASK, s->umask ); tr_bencDictAddInt ( d, TR_PREFS_KEY_UPLOAD_SLOTS_PER_TORRENT, s->uploadSlotsPerTorrent ); tr_bencDictAddStr ( d, TR_PREFS_KEY_BIND_ADDRESS_IPV4, tr_ntop_non_ts( &s->public_ipv4->addr ) ); tr_bencDictAddStr ( d, TR_PREFS_KEY_BIND_ADDRESS_IPV6, tr_ntop_non_ts( &s->public_ipv6->addr ) ); @@ -610,6 +612,12 @@ tr_sessionInitImpl( void * vdata ) signal( SIGPIPE, SIG_IGN ); #endif + /* set the session's file mode creation mask (umask) to session->umask & 0777 */ + found = tr_bencDictFindInt( &settings, TR_PREFS_KEY_UMASK, &i ); + assert( found ); + session->umask = (mode_t)i; + umask( session->umask ); + found = tr_bencDictFindInt( &settings, TR_PREFS_KEY_PEER_LIMIT_TORRENT, &i ); assert( found ); session->peerLimitPerTorrent = i; diff --git a/libtransmission/session.h b/libtransmission/session.h index 7c5b3e7cc..a873802e3 100644 --- a/libtransmission/session.h +++ b/libtransmission/session.h @@ -54,6 +54,8 @@ struct tr_session tr_benc removedTorrents; + int umask; + int speedLimit[2]; tr_bool speedLimitEnabled[2]; diff --git a/libtransmission/transmission.h b/libtransmission/transmission.h index 4cbcb7b23..89c61bf51 100644 --- a/libtransmission/transmission.h +++ b/libtransmission/transmission.h @@ -202,6 +202,7 @@ const char* tr_getDefaultDownloadDir( void ); #define TR_PREFS_KEY_DSPEED_ENABLED "speed-limit-down-enabled" #define TR_PREFS_KEY_USPEED_ENABLED "speed-limit-up-enabled" #define TR_PREFS_KEY_USPEED "speed-limit-up" +#define TR_PREFS_KEY_UMASK "umask" #define TR_PREFS_KEY_UPLOAD_SLOTS_PER_TORRENT "upload-slots-per-torrent"