comparison src/fileio.c @ 2360:d8e4b27cef80 vim73

Change 'cryptmethod' from a number to a string option. Make it global-local.
author Bram Moolenaar <bram@vim.org>
date Tue, 20 Jul 2010 17:32:38 +0200
parents ccda151dde4e
children a3aca345aafa
comparison
equal deleted inserted replaced
2359:496feb41b83f 2360:d8e4b27cef80
61 #endif 61 #endif
62 #ifdef FEAT_VIMINFO 62 #ifdef FEAT_VIMINFO
63 static void check_marks_read __ARGS((void)); 63 static void check_marks_read __ARGS((void));
64 #endif 64 #endif
65 #ifdef FEAT_CRYPT 65 #ifdef FEAT_CRYPT
66 static int get_crypt_method __ARGS((char *ptr, int len)); 66 static int crypt_method_from_magic __ARGS((char *ptr, int len));
67 static char_u *check_for_cryptkey __ARGS((char_u *cryptkey, char_u *ptr, long *sizep, off_t *filesizep, int newfile, char_u *fname, int *did_ask)); 67 static char_u *check_for_cryptkey __ARGS((char_u *cryptkey, char_u *ptr, long *sizep, off_t *filesizep, int newfile, char_u *fname, int *did_ask));
68 #endif 68 #endif
69 #ifdef UNIX 69 #ifdef UNIX
70 static void set_file_time __ARGS((char_u *fname, time_t atime, time_t mtime)); 70 static void set_file_time __ARGS((char_u *fname, time_t atime, time_t mtime));
71 #endif 71 #endif
2853 * Get the crypt method used for a file from "ptr[len]", the magic text at the 2853 * Get the crypt method used for a file from "ptr[len]", the magic text at the
2854 * start of the file. 2854 * start of the file.
2855 * Returns -1 when no encryption used. 2855 * Returns -1 when no encryption used.
2856 */ 2856 */
2857 static int 2857 static int
2858 get_crypt_method(ptr, len) 2858 crypt_method_from_magic(ptr, len)
2859 char *ptr; 2859 char *ptr;
2860 int len; 2860 int len;
2861 { 2861 {
2862 int i; 2862 int i;
2863 2863
2890 off_t *filesizep; /* nr of bytes used from file */ 2890 off_t *filesizep; /* nr of bytes used from file */
2891 int newfile; /* editing a new buffer */ 2891 int newfile; /* editing a new buffer */
2892 char_u *fname; /* file name to display */ 2892 char_u *fname; /* file name to display */
2893 int *did_ask; /* flag: whether already asked for key */ 2893 int *did_ask; /* flag: whether already asked for key */
2894 { 2894 {
2895 int method = get_crypt_method((char *)ptr, *sizep); 2895 int method = crypt_method_from_magic((char *)ptr, *sizep);
2896 2896
2897 if (method >= 0) 2897 if (method >= 0)
2898 { 2898 {
2899 curbuf->b_p_cm = method; 2899 set_crypt_method(curbuf, method);
2900 if (method > 0) 2900 if (method > 0)
2901 (void)blowfish_self_test(); 2901 (void)blowfish_self_test();
2902 if (cryptkey == NULL && !*did_ask) 2902 if (cryptkey == NULL && !*did_ask)
2903 { 2903 {
2904 if (*curbuf->b_p_key) 2904 if (*curbuf->b_p_key)
2966 char_u buffer[CRYPT_MAGIC_LEN + CRYPT_SALT_LEN_MAX 2966 char_u buffer[CRYPT_MAGIC_LEN + CRYPT_SALT_LEN_MAX
2967 + CRYPT_SEED_LEN_MAX + 2]; 2967 + CRYPT_SEED_LEN_MAX + 2];
2968 2968
2969 if (fread(buffer, CRYPT_MAGIC_LEN, 1, fp) != 1) 2969 if (fread(buffer, CRYPT_MAGIC_LEN, 1, fp) != 1)
2970 return FAIL; 2970 return FAIL;
2971 method = get_crypt_method((char *)buffer, 2971 method = crypt_method_from_magic((char *)buffer,
2972 CRYPT_MAGIC_LEN + 2972 CRYPT_MAGIC_LEN +
2973 CRYPT_SEED_LEN_MAX + 2973 CRYPT_SEED_LEN_MAX +
2974 CRYPT_SALT_LEN_MAX); 2974 CRYPT_SALT_LEN_MAX);
2975 if (method < 0 || method != curbuf->b_p_cm) 2975 if (method < 0 || method != get_crypt_method(curbuf))
2976 return FAIL; 2976 return FAIL;
2977 2977
2978 crypt_push_state(); 2978 crypt_push_state();
2979 if (method == 0) 2979 if (method == 0)
2980 crypt_init_keys(curbuf->b_p_key); 2980 crypt_init_keys(curbuf->b_p_key);
3001 prepare_crypt_write(buf, lenp) 3001 prepare_crypt_write(buf, lenp)
3002 buf_T *buf; 3002 buf_T *buf;
3003 int *lenp; 3003 int *lenp;
3004 { 3004 {
3005 char_u *header; 3005 char_u *header;
3006 int seed_len = crypt_seed_len[buf->b_p_cm]; 3006 int seed_len = crypt_seed_len[get_crypt_method(buf)];
3007 int salt_len = crypt_salt_len[buf->b_p_cm]; 3007 int salt_len = crypt_salt_len[get_crypt_method(buf)];
3008 char_u *salt; 3008 char_u *salt;
3009 char_u *seed; 3009 char_u *seed;
3010 3010
3011 header = alloc_clear(CRYPT_MAGIC_LEN + CRYPT_SALT_LEN_MAX 3011 header = alloc_clear(CRYPT_MAGIC_LEN + CRYPT_SALT_LEN_MAX
3012 + CRYPT_SEED_LEN_MAX + 2); 3012 + CRYPT_SEED_LEN_MAX + 2);
3013 if (header != NULL) 3013 if (header != NULL)
3014 { 3014 {
3015 crypt_push_state(); 3015 crypt_push_state();
3016 use_crypt_method = buf->b_p_cm; /* select pkzip or blowfish */ 3016 use_crypt_method = get_crypt_method(buf); /* select zip or blowfish */
3017 vim_strncpy(header, (char_u *)crypt_magic[use_crypt_method], 3017 vim_strncpy(header, (char_u *)crypt_magic[use_crypt_method],
3018 CRYPT_MAGIC_LEN); 3018 CRYPT_MAGIC_LEN);
3019 if (buf->b_p_cm == 0) 3019 if (use_crypt_method == 0)
3020 crypt_init_keys(buf->b_p_key); 3020 crypt_init_keys(buf->b_p_key);
3021 else 3021 else
3022 { 3022 {
3023 /* Using blowfish, add salt and seed. */ 3023 /* Using blowfish, add salt and seed. */
3024 salt = header + CRYPT_MAGIC_LEN; 3024 salt = header + CRYPT_MAGIC_LEN;