File: setup-vms.h

package info (click to toggle)
curl 8.18.0-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 32,016 kB
  • sloc: ansic: 202,975; perl: 20,695; python: 10,293; sh: 6,684; makefile: 1,529; pascal: 239; cpp: 174
file content (397 lines) | stat: -rw-r--r-- 15,248 bytes parent folder | download | duplicates (3)
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
#ifndef HEADER_CURL_SETUP_VMS_H
#define HEADER_CURL_SETUP_VMS_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 * SPDX-License-Identifier: curl
 *
 ***************************************************************************/

/*                                                                         */
/* JEM, 12/30/12, VMS now generates config.h, so only define wrappers for  */
/*                getenv(), getpwuid() and provide is_vms_shell()          */
/*                Also need upper case symbols for system services, and    */
/*                OpenSSL, and some Kerberos image                         */

#ifdef __DECC
#pragma message save
#pragma message disable dollarid
#endif

/* Hide the stuff we are overriding */
#define getenv decc_getenv
#ifdef __DECC
#  if __INITIAL_POINTER_SIZE != 64
#    define getpwuid decc_getpwuid
#  endif
#endif
#include <stdlib.h>
char *decc$getenv(const char *__name);
#include <pwd.h>

#include <string.h>
#include <unixlib.h>

#undef getenv
#undef getpwuid
#define getenv   vms_getenv
#define getpwuid vms_getpwuid

/* VAX needs these in upper case when compiling exact case */
#define sys$assign SYS$ASSIGN
#define sys$dassgn SYS$DASSGN
#define sys$qiow   SYS$QIOW

#ifdef __DECC
#  if __INITIAL_POINTER_SIZE
#    pragma __pointer_size __save
#  endif
#endif

#if __USE_LONG_GID_T
#  define decc_getpwuid DECC$__LONG_GID_GETPWUID
#else
#  if __INITIAL_POINTER_SIZE
#    define decc_getpwuid decc$__32_getpwuid
#  else
#    define decc_getpwuid decc$getpwuid
#  endif
#endif

struct passwd *decc_getpwuid(uid_t uid);

#ifdef __DECC
#  if __INITIAL_POINTER_SIZE == 32
/* Translate the path, but only if the path is a VMS file specification */
/* The translation is usually only needed for older versions of VMS */
static char *vms_translate_path(const char *path)
{
  char *unix_path;
  char *test_str;

  /* See if the result is in VMS format, if not, we are done */
  /* Assume that this is a PATH, not just some data */
  test_str = strpbrk(path, ":[<^");
  if(!test_str) {
    return (char *)path;
  }

  unix_path = decc$translate_vms(path);

  if((int)unix_path <= 0) {
    /* We can not translate it, so return the original string */
    return (char *)path;
  }
}
#  else
   /* VMS translate path is actually not needed on the current 64-bit */
   /* VMS platforms, so instead of figuring out the pointer settings */
   /* Change it to a noop */
#  define vms_translate_path(__path) __path
#  endif
#endif

#ifdef __DECC
#  if __INITIAL_POINTER_SIZE
#    pragma __pointer_size __restore
#  endif
#endif

static char *vms_getenv(const char *envvar)
{
  char *result;
  char *vms_path;

  /* first use the DECC getenv() function */
  result = decc$getenv(envvar);
  if(!result) {
    return result;
  }

  vms_path = result;
  result = vms_translate_path(vms_path);

  /* note that if you backport this to use VAX C RTL, that the VAX C RTL */
  /* may do a malloc(2048) for each call to getenv(), so you will need   */
  /* to add a free(vms_path) */
  /* Do not do a free() for DEC C RTL builds, which should be used for */
  /* VMS 5.5-2 and later, even if using GCC */

  return result;
}

static struct passwd vms_passwd_cache;

static struct passwd *vms_getpwuid(uid_t uid)
{
  struct passwd *my_passwd;

/* Hack needed to support 64-bit builds, decc_getpwnam is 32-bit only */
#ifdef __DECC
#  if __INITIAL_POINTER_SIZE
  __char_ptr32 unix_path;
#  else
  char *unix_path;
#  endif
#else
  char *unix_path;
#endif

  my_passwd = decc_getpwuid(uid);
  if(!my_passwd) {
    return my_passwd;
  }

  unix_path = vms_translate_path(my_passwd->pw_dir);

  if((long)unix_path <= 0) {
    /* We can not translate it, so return the original string */
    return my_passwd;
  }

  /* If no changes needed just return it */
  if(unix_path == my_passwd->pw_dir) {
    return my_passwd;
  }

  /* Need to copy the structure returned */
  /* Since curl is only using pw_dir, no need to fix up */
  /* the pw_shell when running under Bash */
  vms_passwd_cache.pw_name = my_passwd->pw_name;
  vms_passwd_cache.pw_uid = my_passwd->pw_uid;
  vms_passwd_cache.pw_gid = my_passwd->pw_uid;
  vms_passwd_cache.pw_dir = unix_path;
  vms_passwd_cache.pw_shell = my_passwd->pw_shell;

  return &vms_passwd_cache;
}

#ifdef __DECC
#pragma message restore
#endif

/* Bug - VMS OpenSSL and Kerberos universal symbols are in uppercase only */
/* VMS libraries should have universal symbols in exact and uppercase */

#define ASN1_INTEGER_get           ASN1_INTEGER_GET
#define ASN1_STRING_data           ASN1_STRING_DATA
#define ASN1_STRING_length         ASN1_STRING_LENGTH
#define ASN1_STRING_print          ASN1_STRING_PRINT
#define ASN1_STRING_to_UTF8        ASN1_STRING_TO_UTF8
#define ASN1_STRING_type           ASN1_STRING_TYPE
#define BIO_ctrl                   BIO_CTRL
#define BIO_free                   BIO_FREE
#define BIO_new                    BIO_NEW
#define BIO_s_mem                  BIO_S_MEM
#define BN_bn2bin                  BN_BN2BIN
#define BN_num_bits                BN_NUM_BITS
#define CRYPTO_cleanup_all_ex_data CRYPTO_CLEANUP_ALL_EX_DATA
#define CRYPTO_free                CRYPTO_FREE
#define CRYPTO_malloc              CRYPTO_MALLOC
#define CONF_modules_load_file     CONF_MODULES_LOAD_FILE
#ifdef __VAX
#  ifdef VMS_OLD_SSL
  /* Ancient OpenSSL on VAX/VMS missing this constant */
#    define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10
#    undef CONF_modules_load_file
static int CONF_modules_load_file(const char *filename,
                                  const char *appname,
                                  unsigned long flags) {
  return 1;
}
#  endif
#endif
#define DES_ecb_encrypt             DES_ECB_ENCRYPT
#define DES_set_key                 DES_SET_KEY
#define DES_set_odd_parity          DES_SET_ODD_PARITY
#define ENGINE_ctrl                 ENGINE_CTRL
#define ENGINE_ctrl_cmd             ENGINE_CTRL_CMD
#define ENGINE_finish               ENGINE_FINISH
#define ENGINE_free                 ENGINE_FREE
#define ENGINE_get_first            ENGINE_GET_FIRST
#define ENGINE_get_id               ENGINE_GET_ID
#define ENGINE_get_next             ENGINE_GET_NEXT
#define ENGINE_init                 ENGINE_INIT
#define ENGINE_load_builtin_engines ENGINE_LOAD_BUILTIN_ENGINES
#define ENGINE_load_private_key     ENGINE_LOAD_PRIVATE_KEY
#define ENGINE_set_default          ENGINE_SET_DEFAULT
#define ERR_clear_error             ERR_CLEAR_ERROR
#define ERR_error_string            ERR_ERROR_STRING
#define ERR_error_string_n          ERR_ERROR_STRING_N
#define ERR_free_strings            ERR_FREE_STRINGS
#define ERR_get_error               ERR_GET_ERROR
#define ERR_peek_error              ERR_PEEK_ERROR
#define ERR_remove_state            ERR_REMOVE_STATE
#define EVP_PKEY_copy_parameters    EVP_PKEY_COPY_PARAMETERS
#define EVP_PKEY_free               EVP_PKEY_FREE
#define EVP_cleanup                 EVP_CLEANUP
#define GENERAL_NAMES_free          GENERAL_NAMES_FREE
#define i2d_X509_PUBKEY             I2D_X509_PUBKEY
#define MD4_Final                   MD4_FINAL
#define MD4_Init                    MD4_INIT
#define MD4_Update                  MD4_UPDATE
#define MD5_Final                   MD5_FINAL
#define MD5_Init                    MD5_INIT
#define MD5_Update                  MD5_UPDATE
#define OPENSSL_add_all_algo_noconf OPENSSL_ADD_ALL_ALGO_NOCONF
#ifndef __VAX
#define OPENSSL_load_builtin_modules OPENSSL_LOAD_BUILTIN_MODULES
#endif
#define PEM_read_X509                   PEM_READ_X509
#define PEM_write_bio_X509              PEM_WRITE_BIO_X509
#define PKCS12_free                     PKCS12_FREE
#define PKCS12_parse                    PKCS12_PARSE
#define RAND_add                        RAND_ADD
#define RAND_bytes                      RAND_BYTES
#define RAND_file_name                  RAND_FILE_NAME
#define RAND_load_file                  RAND_LOAD_FILE
#define RAND_status                     RAND_STATUS
#define SSL_CIPHER_get_name             SSL_CIPHER_GET_NAME
#define SSL_CTX_add_client_CA           SSL_CTX_ADD_CLIENT_CA
#define SSL_CTX_callback_ctrl           SSL_CTX_CALLBACK_CTRL
#define SSL_CTX_check_private_key       SSL_CTX_CHECK_PRIVATE_KEY
#define SSL_CTX_ctrl                    SSL_CTX_CTRL
#define SSL_CTX_free                    SSL_CTX_FREE
#define SSL_CTX_get_cert_store          SSL_CTX_GET_CERT_STORE
#define SSL_CTX_load_verify_locations   SSL_CTX_LOAD_VERIFY_LOCATIONS
#define SSL_CTX_new                     SSL_CTX_NEW
#define SSL_CTX_set_cipher_list         SSL_CTX_SET_CIPHER_LIST
#define SSL_CTX_set_def_passwd_cb_ud    SSL_CTX_SET_DEF_PASSWD_CB_UD
#define SSL_CTX_set_default_passwd_cb   SSL_CTX_SET_DEFAULT_PASSWD_CB
#define SSL_CTX_set_msg_callback        SSL_CTX_SET_MSG_CALLBACK
#define SSL_CTX_set_verify              SSL_CTX_SET_VERIFY
#define SSL_CTX_use_PrivateKey          SSL_CTX_USE_PRIVATEKEY
#define SSL_CTX_use_PrivateKey_file     SSL_CTX_USE_PRIVATEKEY_FILE
#define SSL_CTX_use_cert_chain_file     SSL_CTX_USE_CERT_CHAIN_FILE
#define SSL_CTX_use_certificate         SSL_CTX_USE_CERTIFICATE
#define SSL_CTX_use_certificate_file    SSL_CTX_USE_CERTIFICATE_FILE
#define SSL_SESSION_free                SSL_SESSION_FREE
#define SSL_connect                     SSL_CONNECT
#define SSL_free                        SSL_FREE
#define SSL_get1_session                SSL_GET1_SESSION
#define SSL_get_certificate             SSL_GET_CERTIFICATE
#define SSL_get_current_cipher          SSL_GET_CURRENT_CIPHER
#define SSL_get_error                   SSL_GET_ERROR
#define SSL_get_peer_cert_chain         SSL_GET_PEER_CERT_CHAIN
#define SSL_get_peer_certificate        SSL_GET_PEER_CERTIFICATE
#define SSL_get_privatekey              SSL_GET_PRIVATEKEY
#define SSL_get_session                 SSL_GET_SESSION
#define SSL_get_shutdown                SSL_GET_SHUTDOWN
#define SSL_get_verify_result           SSL_GET_VERIFY_RESULT
#define SSL_library_init                SSL_LIBRARY_INIT
#define SSL_load_error_strings          SSL_LOAD_ERROR_STRINGS
#define SSL_new                         SSL_NEW
#define SSL_peek                        SSL_PEEK
#define SSL_pending                     SSL_PENDING
#define SSL_read                        SSL_READ
#define SSL_set_connect_state           SSL_SET_CONNECT_STATE
#define SSL_set_fd                      SSL_SET_FD
#define SSL_set_session                 SSL_SET_SESSION
#define SSL_shutdown                    SSL_SHUTDOWN
#define SSL_version                     SSL_VERSION
#define SSL_write                       SSL_WRITE
#define SSLeay                          SSLEAY
#define SSLv23_client_method            SSLV23_CLIENT_METHOD
#define SSLv3_client_method             SSLV3_CLIENT_METHOD
#define TLSv1_client_method             TLSV1_CLIENT_METHOD
#define UI_create_method                UI_CREATE_METHOD
#define UI_destroy_method               UI_DESTROY_METHOD
#define UI_get0_user_data               UI_GET0_USER_DATA
#define UI_get_input_flags              UI_GET_INPUT_FLAGS
#define UI_get_string_type              UI_GET_STRING_TYPE
#define UI_create_method                UI_CREATE_METHOD
#define UI_destroy_method               UI_DESTROY_METHOD
#define UI_method_get_closer            UI_METHOD_GET_CLOSER
#define UI_method_get_opener            UI_METHOD_GET_OPENER
#define UI_method_get_reader            UI_METHOD_GET_READER
#define UI_method_get_writer            UI_METHOD_GET_WRITER
#define UI_method_set_closer            UI_METHOD_SET_CLOSER
#define UI_method_set_opener            UI_METHOD_SET_OPENER
#define UI_method_set_reader            UI_METHOD_SET_READER
#define UI_method_set_writer            UI_METHOD_SET_WRITER
#define UI_OpenSSL                      UI_OPENSSL
#define UI_set_result                   UI_SET_RESULT
#define X509V3_EXT_print                X509V3_EXT_PRINT
#define X509_EXTENSION_get_critical     X509_EXTENSION_GET_CRITICAL
#define X509_EXTENSION_get_data         X509_EXTENSION_GET_DATA
#define X509_EXTENSION_get_object       X509_EXTENSION_GET_OBJECT
#define X509_LOOKUP_file                X509_LOOKUP_FILE
#define X509_NAME_ENTRY_get_data        X509_NAME_ENTRY_GET_DATA
#define X509_NAME_get_entry             X509_NAME_GET_ENTRY
#define X509_NAME_get_index_by_NID      X509_NAME_GET_INDEX_BY_NID
#define X509_NAME_print_ex              X509_NAME_PRINT_EX
#define X509_STORE_CTX_get_current_cert X509_STORE_CTX_GET_CURRENT_CERT
#define X509_STORE_add_lookup           X509_STORE_ADD_LOOKUP
#define X509_STORE_set_flags            X509_STORE_SET_FLAGS
#define X509_check_issued               X509_CHECK_ISSUED
#define X509_free                       X509_FREE
#define X509_get_ext_d2i                X509_GET_EXT_D2I
#define X509_get_issuer_name            X509_GET_ISSUER_NAME
#define X509_get_pubkey                 X509_GET_PUBKEY
#define X509_get_serialNumber           X509_GET_SERIALNUMBER
#define X509_get_subject_name           X509_GET_SUBJECT_NAME
#define X509_load_crl_file              X509_LOAD_CRL_FILE
#define X509_verify_cert_error_string   X509_VERIFY_CERT_ERROR_STRING
#define d2i_PKCS12_fp                   D2I_PKCS12_FP
#define i2t_ASN1_OBJECT                 I2T_ASN1_OBJECT
#define sk_num                          SK_NUM
#define sk_pop                          SK_POP
#define sk_pop_free                     SK_POP_FREE
#define sk_value                        SK_VALUE
#define SHA256_Final  SHA256_FINAL
#define SHA256_Init   SHA256_INIT
#define SHA256_Update SHA256_UPDATE

#define USE_UPPERCASE_GSSAPI 1
#define gss_seal             GSS_SEAL
#define gss_unseal           GSS_UNSEAL

#define USE_UPPERCASE_KRBAPI 1

/* AI_NUMERICHOST needed for IP V6 support in curl */
#ifdef HAVE_NETDB_H
#include <netdb.h>
#ifndef AI_NUMERICHOST
#undef USE_IPV6
#endif
#endif

/* VAX symbols are always in uppercase */
#ifdef __VAX
#define inflate       INFLATE
#define inflateEnd    INFLATEEND
#define inflateInit2_ INFLATEINIT2_
#define inflateInit_  INFLATEINIT_
#define zlibVersion   ZLIBVERSION
#endif

/* Older VAX OpenSSL port defines these as Macros */
/* Need to include the headers first and then redefine */
/* that way a newer port will also work if some one has one */
#ifdef __VAX

#  include <openssl/evp.h>
#  ifndef OpenSSL_add_all_algorithms
#    define OpenSSL_add_all_algorithms OPENSSL_ADD_ALL_ALGORITHMS
     void OPENSSL_ADD_ALL_ALGORITHMS(void);
#  endif
#endif

#endif /* HEADER_CURL_SETUP_VMS_H */