source: TI05-delivery/trunk/src/bbftp-client-3.2.0/bbftpc/bbftp_private_user.c @ 1289

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI05-delivery/trunk/src/bbftp-client-3.2.0/bbftpc/bbftp_private_user.c@1289
Revision 1289, 9.6 KB checked in by spascoe, 13 years ago (diff)

Updated python code to reflect the renaming of the delivery package to pybbftp.
Some C tidying to reduce compiler warnings.

Line 
1/*
2 * bbftpc/bbftp_private_user.c
3 * Copyright (C) 1999, 2000, 2001, 2002 IN2P3, CNRS
4 * bbftp@in2p3.fr
5 * http://doc.in2p3.fr/bbftp
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20 */ 
21
22/****************************************************************************
23
24 
25 
26 bbftp_private_user.c   v 2.1.0 2001/05/21  - Routines creation
27
28*****************************************************************************/
29#include <stdio.h>
30#include <stdlib.h>
31
32#include <bbftp_private_user.h>
33#include <client.h>
34
35#ifdef NDG_AUTH
36int ndg_client_auth(char *logmessage);
37#endif // NDG_PRIVATE_AUTH
38
39
40/*
41** username contain a pointer to the string given with the -u flag
42*/
43extern char *username ;
44/*
45** privatestr contain a pointer to the string given with the -P flag
46*/
47extern char *privatestr ;
48
49extern int debug;
50
51/* From bbftp_util.c */
52void PRINTMESSAGE(FILE *strm , int flag, int errcode, int tok, char *fmt, ...);
53
54#ifndef NDG_PYTHON_EMBED
55/* prototypes */
56static int ndg_message_recv(char **buffer, int *length, char *logmessage);
57static int ndg_message_send(char *buffer, int length, char *logmessage);
58#endif
59
60/*******************************************************************************
61** bbftp_private_getargs :                                                     *
62**                                                                             *
63**      Routine to get arguments for private authentication. This routine is   *
64**      called after several tests have been made. The variable to be set are  *
65**      to be define in bbftp_private_user.h to be used by other routines.     *
66**                                                                             *
67**      OUPUT variable :                                                       *
68**          logmessage :  to write the error message in case of error          *
69**                                                                             *
70**      GLOBAL VARIABLE USED :                                                 *
71**                                                                             *
72**                                                                             *
73**      RETURN:                                                                *
74**          -1  Unrecoverable error                                            *
75**           0  OK                                                             *
76**                                                                             *
77*******************************************************************************/
78
79int bbftp_private_getargs(char *logmessage)
80{
81    return 0 ;
82}
83
84/*******************************************************************************
85** bbftp_private_auth :                                                        *
86**                                                                             *
87**      Routine to do the private authentication. This routine just have to    *
88**      send or to receive private data to the bbftpd daemon. For that it will *
89**      use the two routines :                                                 *
90**          bbftp_private_send                                                 *
91**          bbftp_private_recv                                                 *
92**      The reception of the OK or BAD message will be done by the calling     *
93**      routine, so if this routine has no check to do (for example just       *
94**      sending username and password) it will just call bbftp_private_send    *
95**      twice and let the calling program check if it is OK or BAD.            *
96**                                                                             *
97**      The bbftp_private_send routine has to be called with the following     *
98**      parameters:                                                            *
99**                                                                             *
100**      int bbftp_private_send(char *buffertosend,int buffertosendlength,      *
101**                             char *logmessage)                               *
102**          char    *buffertosend = string to be send to the daemon            *
103**          int     buffertosendlength = length of the string                  *
104**          char    *logmessage                                                *
105**                                                                             *
106**      and return 0 in case of success, -1 in case of error with logmessage   *
107**      filled                                                                 *
108**                                                                             *
109**      The bbftp_private_recv routine has to be called with the following     *
110**      parameters:                                                            *
111**                                                                             *
112**      int bbftp_private_recv(char *buffertorecv,int lengthtoreceive,         *
113**                             char *logmessage)                               *
114**          char    *buffertorecv = buffer to put data received from the       *
115**                                  daemon                                     *
116**          int     lengthtorecv = length of the buffer                        *
117**          char    *logmessage                                                *
118**                                                                             *
119**      and return number of byte received in case of success, -1 in case of   *
120**      error with logmessage filled                                           *
121**      It is the duty of the programmer to be sure that the buffer is large   *
122**      enought                                                                *
123**                                                                             *
124**                                                                             *
125**      OUPUT variable :                                                       *
126**          logmessage :  to write the error message in case of error          *
127**                                                                             *
128**      GLOBAL VARIABLE USED :                                                 *
129**                                                                             *
130**      RETURN:                                                                *
131**          -1  Unrecoverable error                                            *
132**           0  OK                                                             *
133**                                                                             *
134*******************************************************************************/
135
136int bbftp_private_auth(char *logmessage) 
137{
138
139#ifdef NDG_PYTHON_EMBED
140  return ndg_client_auth(logmessage);
141#else
142  char *msg;
143  char default_privatestr[] = "none";
144  int len;
145
146  /* Send version verification message.  */
147  if (ndg_message_send(NDG_HANDSHAKE, strlen(NDG_HANDSHAKE), logmessage) == -1) {
148    return -1;
149  }
150 
151  /* Receive response */
152  if (ndg_message_recv(&msg, &len, logmessage) == -1) {
153    return -1;
154  }
155 
156  if (debug) {
157    PRINTMESSAGE(stdout,CASE_NORMAL,0,0,"Received Auth handshake: %s\n", msg) ;
158  }
159  free(msg);
160
161  /* Send the privatestr */
162  // If there is no private string, send default
163  if (privatestr == NULL) {
164    privatestr = default_privatestr;
165  }
166
167  if (ndg_message_send(privatestr, strlen(privatestr), logmessage) == -1) {
168    return -1;
169  }
170
171  return  0 ;
172#endif // NDG_PRIVATE_AUTH
173}
174
175
176
177#ifndef NDG_PYTHON_EMBED
178/*
179 * Higher level message transfer functions.
180 *
181 */
182
183/**
184 * Send a message, declaring it's length to the client.
185 *
186 * @param buffer a pointer to the message buffer
187 * @param length the number of bytes to send
188 * @param[out] loggmessage is filled with the error message on error
189 * @return 0 if OK, -1 if error
190 */
191static int ndg_message_send(char *buffer, int length, char *logmessage) {
192  char ctrl[NDG_MESSAGE_LEN];
193
194  sprintf(ctrl, "NDG-msg: %i", length);
195  if (bbftp_private_send(ctrl, NDG_MESSAGE_LEN, logmessage) == -1) {
196    return -1;
197  }
198
199  if (bbftp_private_send(buffer, length, logmessage) == -1) {
200    return -1;
201  }
202
203  return 0;
204}
205
206/**
207 * Receive a message of variable length
208 *
209 * @param[out] buffer is set to newly allocated message buffer
210 * @param[out] length is set to the length of the message
211 * @param[out] logmessage is filled with the logmessage on error
212 * @return 0 if OK, -1 if error
213 */
214static int ndg_message_recv(char **buffer, int *length, char *logmessage) {
215  char ctrl[NDG_MESSAGE_LEN];
216
217  if (bbftp_private_recv(ctrl, NDG_MESSAGE_LEN, logmessage) == -1) {
218    return -1;
219  }
220  if (sscanf(ctrl, "NDG-msg: %i", length) != 1) {
221    sprintf(logmessage, "ndg_message_recv ctrl error: %40s", ctrl);
222    return -1;
223  }
224
225  if ((*buffer = (char *)malloc(*length * sizeof(char))) == NULL) {
226    sprintf(logmessage, "ngd_message_recv malloc error");
227    return -1;
228  }
229
230  if (bbftp_private_recv(*buffer, *length, logmessage) == -1) {
231    free(*buffer); *buffer = NULL;
232    return -1;
233  }
234
235  return 0;
236}
237
238#endif // !NDG_PYTHON_EMBED
Note: See TracBrowser for help on using the repository browser.