diff options
Diffstat (limited to 'usr/src/cmd/fmli/oh/namecheck.c')
-rw-r--r-- | usr/src/cmd/fmli/oh/namecheck.c | 259 |
1 files changed, 0 insertions, 259 deletions
diff --git a/usr/src/cmd/fmli/oh/namecheck.c b/usr/src/cmd/fmli/oh/namecheck.c deleted file mode 100644 index 0f831accaa..0000000000 --- a/usr/src/cmd/fmli/oh/namecheck.c +++ /dev/null @@ -1,259 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ - -/* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -/* Copyright (c) 1984, 1985, 1986, 1987, 1988, 1989 AT&T */ -/* All Rights Reserved */ - - -#pragma ident "%Z%%M% %I% %E% SMI" - -#include <stdio.h> -#include <string.h> -#include <fcntl.h> -#include <ctype.h> -#include <time.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <errno.h> -#include "mio.h" -#include "wish.h" -#include "typetab.h" -#include "partabdefs.h" -#include "message.h" -#include "sizes.h" - -extern struct ott_tab *Cur_ott; -static int find_max(); - -bool -namecheck(path, name, objtype, errstr, is_new) -char *path, *name, *objtype, **errstr; -bool is_new; -{ - int len; - static char error[MESSIZ]; - char pathbuf[PATHSIZ], oldpath[PATHSIZ]; - char *p; - char *template = NULL; - int span; - int fs_max_fix; - int maxchar; - int maxpath; - int retval; - struct opt_entry *opt; - struct ott_entry *ott; - extern struct one_part Parts[]; - struct opt_entry *obj_to_parts(); - struct ott_entry *dname_to_ott(); - extern char * part_construct(); - extern char * path_to_fstype(); - extern char Opwd[]; - -#ifdef _DEBUG - _debug(stderr, "in namecheck(%s)\n", name); -#endif - - if (name == NULL || name[0] == '\0') { - *errstr = "Object name must have at least 1 character"; - return(FALSE); - } -/* miked k17 */ -/* for (p = name; *p; p++) */ /* convert spaces and tabs to underlines */ -/* if (*p == ' ' || *p == '\t') - *p = '_'; -*/ - - for (p = name; *p; p++) /* check for spaces and tabs */ - if (*p == ' ' || *p == '\t') { - sprintf(error, "Object name cannot contain space or tab characters\n"); - *errstr = error; - return(FALSE); - } - - if (objtype) - opt = obj_to_parts(objtype); - else - opt = NULL; - -/* if ( path && ! strcmp(path_to_fstype(path),"s5") ) */ -/* - * this mess sets the maximum object name size depending on the - * file system type of the path arguement or, if path is null, - * on the value of Opwd, a global containing the pathname of - * the last filefolder made current. The mechanations with - * fs_max_fix are because the is a table in Parts that contains - * max object lengths that are based on 255. This table cannot - * be changed to reflect s5 .vs. ufs so the kluge is made here. - */ - if ( ! strcmp(path_to_fstype(path?path:&Opwd[5]),"s5") ) - fs_max_fix = FILE_NAME_SIZ - 1 - 14; - else - fs_max_fix = 0; - - if (opt) { - template = Parts[opt->part_offset].part_template; - maxchar = find_max(template) - fs_max_fix; - } else { - maxchar = FILE_NAME_SIZ - 1 - fs_max_fix; - } - /* - * changed 12 to 14 here. miked .. upped 14 to FILE_NAME_SIZ. abs - */ - - if ((len=strlen(name)) > maxchar) { - sprintf(error, "Object name cannot have more than %d characters\n", maxchar); - *errstr = error; - return(FALSE); - } - /* check if total pathsize to big */ - if (opt) - maxpath = len + 4; /* 4: "/" + prefix(2) + NULL */ - else - maxpath = FILE_NAME_SIZ + 10; /* name + /.pref + 3 is biggest defined */ - - if ((int)(path?strlen(path):0) + maxpath > PATHSIZ) { - sprintf(error, - "Can't create object: folder path length exceeds %d characters\n" - , PATHSIZ - maxpath); - *errstr = error; - return(FALSE); - } - -/* if ((span=strcspn(name, "!@#$^&*(){}[]|\\`~;\"'<>/?")) < len) { -miked */ - if ((span=strcspn(name, "/!&|<>")) < len) { - sprintf(error, - "Object name cannot contain the special character '%c'", name[span]); - *errstr = error; - return(FALSE); - } - - for (p = name; *p; p++) /* test for only printable characters. miked */ - if ( iscntrl( *p ) ) { - sprintf(error, - "Object name cannot contain the special character ^%c", - (*p + '@')); - *errstr = error; - return(FALSE); - } - - if ((span=strspn(name, ".")) != 0) { - sprintf(error, "Object name cannot start with the character '%c'", *name); - *errstr = error; - return(FALSE); - } - - if (!is_new) { -#ifdef _DEBUG - _debug(stderr, "namecheck returning true\n"); -#endif - return(TRUE); - } - - if (path) { - strcat(strcpy(pathbuf, path), "/"); - } else - pathbuf[0] = '\0'; - - if (template) - strcat(pathbuf, part_construct(name, template)); - else - strcat(pathbuf, name); -#ifdef _DEBUG - _debug(stderr, "namecheck: checking existance of %s\n",pathbuf); -#endif - -#ifndef WISH - /* check if the object is in the wastebasket */ - - if (Cur_ott && path && strcmp(Cur_ott->path, path) != 0) { - strcpy(oldpath, Cur_ott->path); - ott_lock_inc(NULL); - ott_get(path?path:".", 0L, 0L, 0L, 0L); - } else - oldpath[0] = '\0'; - - if ((ott = dname_to_ott(name)) != NULL) { - if (ott->objmask & M_WB) - sprintf(error, "object exists in wastebasket"); - else - sprintf(error, "An object with that name already exists"); - *errstr = error; - retval = FALSE; - } else if (access(pathbuf, 0) != -1) { - *errstr = "An object with that name already exists"; - retval = FALSE; - } else - retval = TRUE; - - if (oldpath[0]) { /* restore old ott */ - make_current(oldpath); - ott_unlock_inc(NULL); - } -#else - if (access(pathbuf, 0) != -1) { - static char dbuf[MESSIZ]; - - sprintf(dbuf, "An object with that name already exists in %s", - bsd_path_to_title(path?path:&Opwd[5], MESS_COLS-43)); - *errstr = dbuf; - retval = FALSE; - } else - retval = TRUE; -#endif - -#ifdef _DEBUG - _debug(stderr, "namecheck returning %d\n", retval); -#endif - return(retval); -} - -static int -find_max(template) -char *template; -{ - int max_len; - register char *p = template; - - while (*p && *p != '%') - p++; - - if (*p == '\0') - return(FILE_NAME_SIZ -1); - - p++; - - if (*p != '.') - return(FILE_NAME_SIZ -1); - - p++; - - if ((max_len = atoi(p)) == 0) - return(FILE_NAME_SIZ -1); - - return(max_len); -} |