s3-talloc Change TALLOC_ZERO_P() to talloc_zero()
[nivanova/samba-autobuild/.git] / source3 / smbd / ntquotas.c
index 240dceddde4d8c7149947f41ad124f49ac3a691f..1f4fc2d0a215aa73d5aa72ed0da9fb30ac906b41 100644 (file)
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
+#include "smbd/smbd.h"
+#include "../lib/util/util_pw.h"
+#include "system/passwd.h"
+#include "passdb/lookup_sid.h"
+#include "libsmb/libsmb.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_QUOTA
 
-static SMB_BIG_UINT limit_nt2unix(SMB_BIG_UINT in, SMB_BIG_UINT bsize)
+static uint64_t limit_nt2unix(uint64_t in, uint64_t bsize)
 {
-       SMB_BIG_UINT ret = (SMB_BIG_UINT)0;
+       uint64_t ret = (uint64_t)0;
 
-       ret =   (SMB_BIG_UINT)(in/bsize);
+       ret =   (uint64_t)(in/bsize);
        if (in>0 && ret==0) {
                /* we have to make sure that a overflow didn't set NO_LIMIT */
-               ret = (SMB_BIG_UINT)1;
+               ret = (uint64_t)1;
        }
 
        if (in == SMB_NTQUOTAS_NO_LIMIT)
@@ -43,11 +47,11 @@ static SMB_BIG_UINT limit_nt2unix(SMB_BIG_UINT in, SMB_BIG_UINT bsize)
        return ret;
 }
 
-static SMB_BIG_UINT limit_unix2nt(SMB_BIG_UINT in, SMB_BIG_UINT bsize)
+static uint64_t limit_unix2nt(uint64_t in, uint64_t bsize)
 {
-       SMB_BIG_UINT ret = (SMB_BIG_UINT)0;
+       uint64_t ret = (uint64_t)0;
 
-       ret = (SMB_BIG_UINT)(in*bsize);
+       ret = (uint64_t)(in*bsize);
        
        if (ret < in) {
                /* we overflow */
@@ -60,19 +64,19 @@ static SMB_BIG_UINT limit_unix2nt(SMB_BIG_UINT in, SMB_BIG_UINT bsize)
        return ret;
 }
 
-static SMB_BIG_UINT limit_blk2inodes(SMB_BIG_UINT in)
+static uint64_t limit_blk2inodes(uint64_t in)
 {
-       SMB_BIG_UINT ret = (SMB_BIG_UINT)0;
+       uint64_t ret = (uint64_t)0;
        
-       ret = (SMB_BIG_UINT)(in/2);
+       ret = (uint64_t)(in/2);
        
        if (ret == 0 && in != 0)
-               ret = (SMB_BIG_UINT)1;
+               ret = (uint64_t)1;
 
        return ret;     
 }
 
-int vfs_get_ntquota(files_struct *fsp, enum SMB_QUOTA_TYPE qtype, DOM_SID *psid, SMB_NTQUOTA_STRUCT *qt)
+int vfs_get_ntquota(files_struct *fsp, enum SMB_QUOTA_TYPE qtype, struct dom_sid *psid, SMB_NTQUOTA_STRUCT *qt)
 {
        int ret;
        SMB_DISK_QUOTA D;
@@ -89,7 +93,7 @@ int vfs_get_ntquota(files_struct *fsp, enum SMB_QUOTA_TYPE qtype, DOM_SID *psid,
 
        if (psid && !sid_to_uid(psid, &id.uid)) {
                DEBUG(0,("sid_to_uid: failed, SID[%s]\n",
-                       sid_string_static(psid)));      
+                        sid_string_dbg(psid)));
        }
 
        ret = SMB_VFS_GET_QUOTA(fsp->conn, qtype, id, &D);
@@ -101,7 +105,7 @@ int vfs_get_ntquota(files_struct *fsp, enum SMB_QUOTA_TYPE qtype, DOM_SID *psid,
                return ret;
        }
                
-       qt->usedspace = (SMB_BIG_UINT)D.curblocks*D.bsize;
+       qt->usedspace = (uint64_t)D.curblocks*D.bsize;
        qt->softlim = limit_unix2nt(D.softlimit, D.bsize);
        qt->hardlim = limit_unix2nt(D.hardlimit, D.bsize);
        qt->qflags = D.qflags;
@@ -110,7 +114,7 @@ int vfs_get_ntquota(files_struct *fsp, enum SMB_QUOTA_TYPE qtype, DOM_SID *psid,
        return 0;
 }
 
-int vfs_set_ntquota(files_struct *fsp, enum SMB_QUOTA_TYPE qtype, DOM_SID *psid, SMB_NTQUOTA_STRUCT *qt)
+int vfs_set_ntquota(files_struct *fsp, enum SMB_QUOTA_TYPE qtype, struct dom_sid *psid, SMB_NTQUOTA_STRUCT *qt)
 {
        int ret;
        SMB_DISK_QUOTA D;
@@ -122,7 +126,7 @@ int vfs_set_ntquota(files_struct *fsp, enum SMB_QUOTA_TYPE qtype, DOM_SID *psid,
 
        id.uid = -1;
 
-       D.bsize     = (SMB_BIG_UINT)QUOTABLOCK_SIZE;
+       D.bsize     = (uint64_t)QUOTABLOCK_SIZE;
 
        D.softlimit = limit_nt2unix(qt->softlim,D.bsize);
        D.hardlimit = limit_nt2unix(qt->hardlim,D.bsize);
@@ -133,7 +137,7 @@ int vfs_set_ntquota(files_struct *fsp, enum SMB_QUOTA_TYPE qtype, DOM_SID *psid,
 
        if (psid && !sid_to_uid(psid, &id.uid)) {
                DEBUG(0,("sid_to_uid: failed, SID[%s]\n",
-                       sid_string_static(psid)));      
+                        sid_string_dbg(psid)));
        }
 
        ret = SMB_VFS_SET_QUOTA(fsp->conn, qtype, id, &D);
@@ -141,7 +145,7 @@ int vfs_set_ntquota(files_struct *fsp, enum SMB_QUOTA_TYPE qtype, DOM_SID *psid,
        return ret;
 }
 
-static BOOL allready_in_quota_list(SMB_NTQUOTA_LIST *qt_list, uid_t uid)
+static bool allready_in_quota_list(SMB_NTQUOTA_LIST *qt_list, uid_t uid)
 {
        SMB_NTQUOTA_LIST *tmp_list = NULL;
        
@@ -176,7 +180,7 @@ int vfs_get_user_ntquota_list(files_struct *fsp, SMB_NTQUOTA_LIST **qt_list)
        while ((usr = sys_getpwent()) != NULL) {
                SMB_NTQUOTA_STRUCT tmp_qt;
                SMB_NTQUOTA_LIST *tmp_list_ent;
-               DOM_SID sid;
+               struct dom_sid  sid;
 
                ZERO_STRUCT(tmp_qt);
 
@@ -189,21 +193,22 @@ int vfs_get_user_ntquota_list(files_struct *fsp, SMB_NTQUOTA_LIST **qt_list)
 
                if (vfs_get_ntquota(fsp, SMB_USER_QUOTA_TYPE, &sid, &tmp_qt)!=0) {
                        DEBUG(5,("no quota entry for sid[%s] path[%s]\n",
-                               sid_string_static(&sid),fsp->conn->connectpath));
+                                sid_string_dbg(&sid),
+                                fsp->conn->connectpath));
                        continue;
                }
 
                DEBUG(15,("quota entry for id[%s] path[%s]\n",
-                       sid_string_static(&sid),fsp->conn->connectpath));
+                         sid_string_dbg(&sid), fsp->conn->connectpath));
 
-               if ((tmp_list_ent=TALLOC_ZERO_P(mem_ctx,SMB_NTQUOTA_LIST))==NULL) {
+               if ((tmp_list_ent=talloc_zero(mem_ctx,SMB_NTQUOTA_LIST))==NULL) {
                        DEBUG(0,("TALLOC_ZERO() failed\n"));
                        *qt_list = NULL;
                        talloc_destroy(mem_ctx);
                        return (-1);
                }
 
-               if ((tmp_list_ent->quotas=TALLOC_ZERO_P(mem_ctx,SMB_NTQUOTA_STRUCT))==NULL) {
+               if ((tmp_list_ent->quotas=talloc_zero(mem_ctx,SMB_NTQUOTA_STRUCT))==NULL) {
                        DEBUG(0,("TALLOC_ZERO() failed\n"));
                        *qt_list = NULL;
                        talloc_destroy(mem_ctx);
@@ -222,6 +227,13 @@ int vfs_get_user_ntquota_list(files_struct *fsp, SMB_NTQUOTA_LIST **qt_list)
        return 0;
 }
 
+static int quota_handle_destructor(SMB_NTQUOTA_HANDLE *handle)
+{
+       if (handle->quota_list)
+               free_ntquota_list(&handle->quota_list);
+       return 0;
+}
+
 void *init_quota_handle(TALLOC_CTX *mem_ctx)
 {
        SMB_NTQUOTA_HANDLE *qt_handle;
@@ -229,30 +241,12 @@ void *init_quota_handle(TALLOC_CTX *mem_ctx)
        if (!mem_ctx)
                return False;
 
-       qt_handle = TALLOC_ZERO_P(mem_ctx,SMB_NTQUOTA_HANDLE);
+       qt_handle = talloc_zero(mem_ctx,SMB_NTQUOTA_HANDLE);
        if (qt_handle==NULL) {
                DEBUG(0,("TALLOC_ZERO() failed\n"));
                return NULL;
        }
 
-       return (void *)qt_handle;       
-}
-
-void destroy_quota_handle(void **pqt_handle)
-{
-       SMB_NTQUOTA_HANDLE *qt_handle = NULL;
-       if (!pqt_handle||!(*pqt_handle))
-               return;
-       
-       qt_handle = (SMB_NTQUOTA_HANDLE *)(*pqt_handle);
-       
-       
-       if (qt_handle->quota_list)
-               free_ntquota_list(&qt_handle->quota_list);
-
-       qt_handle->quota_list = NULL;
-       qt_handle->tmp_list = NULL;
-       qt_handle = NULL;
-
-       return;
+       talloc_set_destructor(qt_handle, quota_handle_destructor);
+       return (void *)qt_handle;
 }