1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
/*
* DCAP - dCache Access Protocol client interface
*
* Copyright (C) 2000,2004 DESY Hamburg DMG-Division.
*
* AUTHOR: Tigran Mkrtchayn (tigran.mkrtchyan@desy.de)
*
* This program can be distributed under the terms of the GNU LGPL.
* See the file COPYING.LIB
*
*/
/*
* $Id: dcap_chmod.c,v 1.2 2004-11-01 19:33:29 tigran Exp $
*/
#include <stdlib.h>
#include <string.h>
#include "dcap.h"
#include "dcap_functions.h"
#include "dcap_protocol.h"
#include "dcap_mqueue.h"
#include "dcap_url.h"
#include "node_plays.h"
#include "debug_level.h"
#include "system_io.h"
int dc_chmod( const char *path, mode_t mode)
{
dcap_url *url;
struct vsp_node *node;
int rc;
url = (dcap_url *)dc_getURL(path);
if( url == NULL ) {
dc_debug(DC_INFO, "Using system native chmod for %s.", path);
return system_chmod(path, mode);
}
node = new_vsp_node( path );
if( node == NULL ) {
free(url->file);
free(url->host);
if( url->prefix != NULL ) free(url->prefix);
free(url);
return 1;
}
node->url = url;
if (url->type == URL_PNFS) {
node->pnfsId = (char *)strdup(url->file);
}else{
node->pnfsId = (char *)strdup(path);
}
node->asciiCommand = DCAP_CMD_CHMOD;
node->mode = mode;
rc = cache_open(node);
/* node cleanup procedure */
node_unplug( node );
deleteQueue(node->queueID);
node_destroy(node);
return rc;
}
|