Mercurial > vim
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; |