smb-errors.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2017 The Squid Software Foundation and contributors
3  *
4  * Squid software is distributed under GPLv2+ license and includes
5  * contributions from numerous individuals and organizations.
6  * Please see the COPYING and CONTRIBUTORS files for details.
7  */
8 
9 /* UNIX SMBlib NetBIOS implementation
10 
11  Version 1.0
12  SMBlib Error values etc ...
13 
14  Copyright (C) Richard Sharpe, Andrew Tridgell, and Merik Karman, 1996
15 */
16 
17 /*
18  This program is free software; you can redistribute it and/or modify
19  it under the terms of the GNU General Public License as published by
20  the Free Software Foundation; either version 2 of the License, or
21  (at your option) any later version.
22 
23  This program is distributed in the hope that it will be useful,
24  but WITHOUT ANY WARRANTY; without even the implied warranty of
25  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26  GNU General Public License for more details.
27 
28  You should have received a copy of the GNU General Public License
29  along with this program; if not, write to the Free Software
30  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
31 */
32 
33 /* This code ripped out of smbclient, where it was attributed to Merik */
34 /* Karman merik@blackadder.dsh.oz.au */
35 /* Modified by Richard Sharpe to try to make it more bullit proof and */
36 /* ensure we don't overwrite strings when not passed enough space. Also */
37 /* added code to say unknown error codes if we see any */
38 
39 #include "squid.h"
40 
41 typedef struct {
42  char *name;
43  int code;
44  char *message;
46 
47 /* Dos Error Messages */
48 err_code_struct dos_msgs[] = {
49  {"ERRbadfunc",1,"Invalid function."},
50  {"ERRbadfile",2,"File not found."},
51  {"ERRbadpath",3,"Directory invalid."},
52  {"ERRnofids",4,"No file descriptors available"},
53  {"ERRnoaccess",5,"Access denied."},
54  {"ERRbadfid",6,"Invalid file handle."},
55  {"ERRbadmcb",7,"Memory control blocks destroyed."},
56  {"ERRnomem",8,"Insufficient server memory to perform the requested function."}
57  ,
58  {"ERRbadmem",9,"Invalid memory block address."},
59  {"ERRbadenv",10,"Invalid environment."},
60  {"ERRbadformat",11,"Invalid format."},
61  {"ERRbadaccess",12,"Invalid open mode."},
62  {"ERRbaddata",13,"Invalid data."},
63  {"ERR",14,"reserved."},
64  {"ERRbaddrive",15,"Invalid drive specified."},
65  {"ERRremcd",16,"A Delete Directory request attempted to remove the server's current directory."},
66  {"ERRdiffdevice",17,"Not same device."},
67  {"ERRnofiles",18,"A File Search command can find no more files matching the specified criteria."},
68  {"ERRbadshare",32,"The sharing mode specified for an Open conflicts with existing FIDs on the file."},
69  {"ERRlock",33,"A Lock request conflicted with an existing lock or specified an invalid mode, or an Unlock requested attempted to remove a lock held by another process."},
70  {"ERRbaddevtyp",66,"The device type is incorrect for a tree connect."},
71  {"ERRbadnetnam",67,"The network name is incorrect or inappropriate."},
72  {"ERRfilexists",80,"The file named in a Create Directory, Make New File or Link request already exists."},
73  {"ERRbadpipe",230,"Pipe invalid."},
74  {"ERRpipebusy",231,"All instances of the requested pipe are busy."},
75  {"ERRpipeclosing",232,"Pipe close in progress."},
76  {"ERRnotconnected",233,"No process on other end of pipe."},
77  {"ERRmoredata",234,"There is more data to be returned."},
78  {"ERRinvapi", 2142, "The API is invalid."},
79  {NULL,-1,NULL}
80 };
81 
82 /* Server Error Messages */
83 err_code_struct server_msgs[] = {
84  {"ERRerror",1,"Non-specific error code."},
85  {"ERRbadpw",2,"Bad password - name/password pair in a Tree Connect or Session Setup are invalid."},
86  {"ERRbadtype",3,"reserved."},
87  {"ERRaccess",4,"Network access denied. The requester does not have the necessary access rights within the specified context for the requested function. The context is defined by the TID or the UID."},
88  {"ERRinvnid",5,"The tree ID (TID) specified in a command was invalid."},
89  {"ERRinvnetname",6,"Invalid network name in tree connect."},
90  {"ERRinvdevice",7,"Invalid device - printer request made to non-printer connection or non-printer request made to printer connection."},
91  {"ERRqfull",49,"Print queue full (files) -- returned by open print file."},
92  {"ERRqtoobig",50,"Print queue full -- no space."},
93  {"ERRqeof",51,"EOF on print queue dump."},
94  {"ERRinvpfid",52,"Invalid print file FID."},
95  {"ERRsmbcmd",64,"The server did not recognize the command received."},
96  {"ERRsrverror",65,"The server encountered an internal error, e.g., system file unavailable."},
97  {"ERRfilespecs",67,"The file handle (FID) and pathname parameters contained an invalid combination of values."},
98  {"ERRreserved",68,"reserved."},
99  {"ERRbadpermits",69,"The access permissions specified for a file or directory are not a valid combination. The server cannot set the requested attribute."},
100  {"ERRreserved",70,"reserved."},
101  {"ERRsetattrmode",71,"The attribute mode in the Set File Attribute request is invalid."},
102  {"ERRpaused",81,"Server is paused."},
103  {"ERRmsgoff",82,"Not receiving messages."},
104  {"ERRnoroom",83,"No room to buffer message."},
105  {"ERRrmuns",87,"Too many remote user names."},
106  {"ERRtimeout",88,"Operation timed out."},
107  {"ERRnoresource",89,"No resources currently available for request."},
108  {"ERRtoomanyuids",90,"Too many UIDs active on this session."},
109  {"ERRbaduid",91,"The UID is not known as a valid ID on this session."},
110  {"ERRusempx",250,"Temp unable to support Raw, use MPX mode."},
111  {"ERRusestd",251,"Temp unable to support Raw, use standard read/write."},
112  {"ERRcontmpx",252,"Continue in MPX mode."},
113  {"ERRreserved",253,"reserved."},
114  {"ERRreserved",254,"reserved."},
115  {"ERRpwdexp",2242,"Password has expired."},
116  {"ERRnosupport",0xFFFF,"Function not supported."},
117  {NULL,-1,NULL}
118 };
119 
120 /* Hard Error Messages */
121 err_code_struct hard_msgs[] = {
122  {"ERRnowrite",19,"Attempt to write on write-protected diskette."},
123  {"ERRbadunit",20,"Unknown unit."},
124  {"ERRnotready",21,"Drive not ready."},
125  {"ERRbadcmd",22,"Unknown command."},
126  {"ERRdata",23,"Data error (CRC)."},
127  {"ERRbadreq",24,"Bad request structure length."},
128  {"ERRseek",25,"Seek error."},
129  {"ERRbadmedia",26,"Unknown media type."},
130  {"ERRbadsector",27,"Sector not found."},
131  {"ERRnopaper",28,"Printer out of paper."},
132  {"ERRwrite",29,"Write fault."},
133  {"ERRread",30,"Read fault."},
134  {"ERRgeneral",31,"General failure."},
135  {"ERRbadshare",32,"A open conflicts with an existing open."},
136  {"ERRlock",33,"A Lock request conflicted with an existing lock or specified an invalid mode, or an Unlock requested attempted to remove a lock held by another process."},
137  {"ERRwrongdisk",34,"The wrong disk was found in a drive."},
138  {"ERRFCBUnavail",35,"No FCBs are available to process request."},
139  {"ERRsharebufexc",36,"A sharing buffer has been exceeded."},
140  {"ERRdiskfull",39,"The disk is full."},
141  {NULL,-1,NULL}
142 };
143 
144 struct {
145  int code;
146  char *class;
148 } err_classes[] = {
149  {0,"SUCCESS",NULL},
150  {0x01,"ERRDOS",dos_msgs},
151  {0x02,"ERRSRV",server_msgs},
152  {0x03,"ERRHRD",hard_msgs},
153  {0x04,"ERRXOS",NULL},
154  {0xE1,"ERRRMX1",NULL},
155  {0xE2,"ERRRMX2",NULL},
156  {0xE3,"ERRRMX3",NULL},
157  {0xFF,"ERRCMD",NULL},
158  {-1,NULL,NULL}
159 };
160 
161 /* Return in the string an error message after decoding the class and code */
162 
163 int SMB_Get_SMB_Error_Msg(int err_class, int err_code, char *msg_buf, int len)
164 
165 {
166  int i,j;
167  char internal_buf[80];
168 
169  for (i=0; err_classes[i].class; i++)
170 
171  if (err_classes[i].code == err_class) {
172 
173  if (err_classes[i].err_msgs) {
174 
175  err_code_struct *err = err_classes[i].err_msgs;
176 
177  for (j=0; err[j].name; j++)
178 
179  if (err_code == err[j].code) {
180 
181  /* Put together the message */
182 
183  strncpy(msg_buf, err_classes[i].class, len);
184  strncat(msg_buf, " - ", len - strlen(msg_buf));
185  strncat(msg_buf, err[j].name, len - strlen(msg_buf));
186  strncat(msg_buf, " (", len - strlen(msg_buf));
187  strncat(msg_buf, err[j].message, len - strlen(msg_buf));
188  strncat(msg_buf, ").", len - strlen(msg_buf));
189 
190  return(strlen(msg_buf));
191  }
192 
193  /* We only get here if the error code is one we don't know about */
194  /* Just print out the code etc ... */
195 
196  strncpy(msg_buf, err_classes[i].class, len);
197  strncat(msg_buf, " - ", len - strlen(msg_buf));
198  snprintf(internal_buf, sizeof(internal_buf)-1, "%d", err_code);
199  strncat(msg_buf, internal_buf, len - strlen(msg_buf));
200  strncat(msg_buf, " (Unknown error code).", len - strlen(msg_buf));
201 
202  return(strlen(msg_buf));
203 
204  } else {
205 
206  strncpy(msg_buf, err_classes[i].class, len);
207  strncat(msg_buf, " - ", len - strlen(msg_buf));
208  snprintf(internal_buf, sizeof(internal_buf)-1, "%d", err_code);
209  strncat(msg_buf, internal_buf, len - strlen(msg_buf));
210 
211  return(strlen(msg_buf));
212 
213  }
214 
215  }
216 
217  /* If we get here, we did not recognize the error class */
218 
219  snprintf(internal_buf, sizeof(internal_buf)-1, "%d", err_class);
220  strncat(msg_buf, internal_buf, len - strlen(msg_buf));
221  strncat(msg_buf, " (Unknown Error Class) - ", len - strlen(msg_buf));
222  snprintf(internal_buf, sizeof(internal_buf)-1, "%d", err_code);
223  strncat(msg_buf, internal_buf, len - strlen(msg_buf));
224  strncat(msg_buf, "(error code).", len - strlen(msg_buf));
225 
226  return(strlen(msg_buf));
227 
228 }
229 
int code
Definition: smb-errors.c:145
err_code_struct * err_msgs
Definition: smb-errors.c:147
int SMB_Get_SMB_Error_Msg(int err_class, int err_code, char *msg_buf, int len)
Definition: smb-errors.c:163
int i
Definition: membanger.c:49
char * message
Definition: smb-errors.c:44
int unsigned int const char *desc STUB void int len
Definition: stub_fd.cc:20
struct @22 err_classes[]
#define NULL
Definition: types.h:166

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors