Mercurial > mplayer.hg
annotate libmpdemux/dvdauth.c @ 7429:7a221aaf7012
Enable the LIVE lib only if the network layer (STREAMING) is enable.
Fixed the bug where if streaming disable and live enable, the live config
test will reenable the network layer.
author | bertrand |
---|---|
date | Tue, 17 Sep 2002 19:47:55 +0000 |
parents | ad967766679a |
children | 9975a432cf47 |
rev | line source |
---|---|
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
1 /* (C)2001,2002 by LGB (Gabor Lenart), based on example programs in libcss |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
2 lgb@lgb.hu |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
3 |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
4 This source is part of MPlayer project. This source is copyrighted by |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
5 the author according to rules declared in GNU/GPL license. |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
6 |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
7 2001 Inital version (LGB) |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
8 2001 fibmap_mplayer to avoid uid=0 mplayer need (LGB) |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
9 2001 Support for libcss with the new API (by ???) |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
10 2002/Jan/04 Use dlopen to access libcss.so to avoid conflict with |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
11 libdvdread [now with only libcss with old API (LGB) |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
12 |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
13 TODO: |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
14 support for libcss libraries with new API */ |
492 | 15 |
16 /* don't do anything with this source if css support was not requested */ | |
17 #include "config.h" | |
18 #ifdef HAVE_LIBCSS | |
19 | |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
20 #warning FIXME: Dynamic loading of libcss.so with newer (ver>0.1) libcss API is not supported in this version! |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
21 |
492 | 22 #include <stdio.h> |
23 #include <stdlib.h> | |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
24 //#include <string.h> // FIXME: conflicts with fs.h |
1510
9ffe6c1a33b9
In case the open on the dvd device fails, print some hints based on errno
jkeil
parents:
1177
diff
changeset
|
25 #include <errno.h> |
492 | 26 #include <unistd.h> |
27 #include <fcntl.h> | |
28 #include <sys/types.h> | |
29 #include <sys/ioctl.h> | |
30 #include <sys/stat.h> | |
1163
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
31 #include <sys/wait.h> |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
32 // #include <css.h> |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
33 |
5872 | 34 #if defined(__FreeBSD__) || defined(__NetBSD__) |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
35 # include <sys/dvdio.h> |
5872 | 36 #elif defined(__OpenBSD__) |
37 # include <sys/cdio.h> | |
38 # define RTLD_NOW RTLD_LAZY | |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
39 #elif defined(__linux__) |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
40 # include <linux/cdrom.h> |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
41 #elif defined(__sun) |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
42 # include <sun/dvdio.h> |
7423
ad967766679a
hpux DVD support fixes by Martin Gansser <mgansser@ngi.de>
arpi
parents:
5872
diff
changeset
|
43 #elif defined(hpux) |
ad967766679a
hpux DVD support fixes by Martin Gansser <mgansser@ngi.de>
arpi
parents:
5872
diff
changeset
|
44 # include <sun/scsi.h> |
4128
f22ecf05acea
patch by Steven M. Schultz to support dvd under BSD/OS
alex
parents:
4093
diff
changeset
|
45 #elif defined(__bsdi__) |
f22ecf05acea
patch by Steven M. Schultz to support dvd under BSD/OS
alex
parents:
4093
diff
changeset
|
46 # include <dvd.h> |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
47 #else |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
48 # error "Need the DVD ioctls" |
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
49 #endif |
492 | 50 |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
51 #include <dlfcn.h> |
492 | 52 #include "dvdauth.h" |
53 | |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
54 |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
55 // #if OLD_CSS_API |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
56 /* |
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
57 * provide some backward compatibiliy macros to compile this |
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
58 * code using the old libcss-0.1 |
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
59 */ |
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
60 #define DVDHandle int |
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
61 #define DVDOpenFailed (-1) |
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
62 |
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
63 #define DVDAuth(hdl, s) ioctl(hdl, DVD_AUTH, s) |
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
64 #define DVDOpenDevice(path) open(path, O_RDONLY) |
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
65 #define DVDCloseDevice(hdl) close(hdl) |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
66 // #define CSSDVDisEncrypted(hdl) CSSisEncrypted(hdl) |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
67 // #define CSSDVDAuthDisc CSSAuthDisc |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
68 |
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
69 |
1018
e5fc7ec51fa3
-dvd is renamed to -dvdauth, variable dvd_device is renamed to dvd_auth_device. These changes are needed for future DVD playback developmenting
lgb
parents:
559
diff
changeset
|
70 char *dvd_auth_device=NULL; |
4228 | 71 extern char *dvd_device; |
1163
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
72 char *dvd_raw_device=NULL; |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
73 char *css_so=NULL; |
492 | 74 unsigned char key_disc[2048]; |
75 unsigned char key_title[5]; | |
546 | 76 unsigned char *dvdimportkey=NULL; |
77 int descrambling=0; | |
492 | 78 |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
79 static void *dlid; |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
80 static int (*dl_CSSisEncrypted)(int); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
81 static int (*dl_CSSAuthDisc)(int,char *); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
82 static int (*dl_CSSAuthTitle)(int, char *,int); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
83 static int (*dl_CSSGetASF)(int); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
84 static int (*dl_CSSDecryptTitleKey)(char *, char *); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
85 static void (*dl_CSSDescramble)(u_char *, u_char *); |
492 | 86 |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
87 dvd_css_descramble ( u_char *sec , u_char *key ) |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
88 { |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
89 (*dl_CSSDescramble)(sec,key); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
90 } |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
91 |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
92 |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
93 #ifdef __linux__ |
492 | 94 #include <linux/fs.h> |
95 | |
96 #ifndef FIBMAP | |
97 #define FIBMAP 1 | |
98 #endif | |
99 | |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
100 |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
101 static int path_to_lba (char *path) |
492 | 102 { |
1163
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
103 int lba = 0; |
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
104 char cmd[100]; |
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
105 FILE *fp; |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
106 |
1163
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
107 snprintf(cmd,sizeof(cmd),"fibmap_mplayer %s",path); |
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
108 fp=popen(cmd,"r"); |
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
109 if (fp) { |
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
110 int ret; |
3700 | 111 memset(cmd,0,sizeof(cmd)); |
1163
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
112 fgets(cmd,99,fp); |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
113 // printf("DVD: cmd: %s\n",cmd); |
1163
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
114 if ((ret=pclose(fp))) |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
115 fprintf(stderr,"DVD: fibmap_mplayer: %s\n",*cmd?cmd:"no error info"); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
116 if (cmd[0]<'0'||cmd[0]>'9') fp=NULL; else { |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
117 if(WIFEXITED(ret) && !WEXITSTATUS(ret)) { |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
118 lba=atoi(cmd); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
119 printf("DVD: fibmap_mplayer is being used\n"); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
120 } else |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
121 fp=NULL; |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
122 } |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
123 } |
1163
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
124 if (!fp) { |
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
125 int fd; |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
126 printf("DVD: fibmap_mplayer could not run, trying with ioctl() ...\n"); |
1163
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
127 if ((fd = open(path, O_RDONLY)) == -1) { |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
128 fprintf(stderr, "DVD: Cannot open file %s: %s", |
1163
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
129 path ? path : "(NULL)", strerror(errno)); |
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
130 return -1; |
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
131 } |
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
132 if (ioctl(fd, FIBMAP, &lba) != 0) { |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
133 perror("DVD: ioctl FIBMAP"); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
134 fprintf(stderr," Hint: run mplayer as root (or better to install fibmap_mplayer as suid root)!\n"); |
1163
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
135 close(fd); |
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
136 return -1; |
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
137 } |
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
138 close(fd); |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
139 } |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
140 printf("DVD: LBA: %d\n",lba); |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
141 return lba; |
492 | 142 } |
1163
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
143 |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
144 #else /*linux*/ |
1163
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
145 |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
146 static int path_to_lba (char *path) |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
147 { |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
148 #warning translating pathname to iso9660 LBA is not supported on this platform |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
149 fprintf(stderr, "DVD: Translating pathname to iso9660 LBA is not supported on this platform\n"); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
150 return -1; |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
151 } |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
152 |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
153 #endif /*linux*/ |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
154 |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
155 |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
156 static int CSSDVDAuthTitlePath(DVDHandle hdl,unsigned char *key_title,char *path) |
1163
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
157 { |
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
158 int lba=path_to_lba(path); |
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
159 if (lba==-1) return -1; |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
160 return (*dl_CSSAuthTitle)(hdl,key_title,lba); |
1163
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
161 } |
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
162 |
ac1341d4a2a7
According an idea, mplayer now can use external setuid root wrapper to do FIBMAP ioctl (requires root priv). Also, a serious bug was fixed in dvdauth.c made by some guy when mixing old and new style CSS API into dvdauth.c ;-)
lgb
parents:
1042
diff
changeset
|
163 |
492 | 164 |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
165 static void reset_agids ( DVDHandle dvd ) |
492 | 166 { |
4337 | 167 #if !defined(DVD_AUTH) && defined(DVDIOCREPORTKEY) |
168 struct dvd_authinfo ai; | |
169 int i; | |
170 for (i = 0; i < 4; i++) { | |
171 memset(&ai, 0, sizeof(ai)); | |
172 ai.format = DVD_INVALIDATE_AGID; | |
173 ai.agid = i; | |
174 ioctl(dvd, DVDIOCREPORTKEY, &ai); | |
175 } | |
176 #else | |
5872 | 177 #if defined(__OpenBSD__) |
178 union | |
179 #endif | |
492 | 180 dvd_authinfo ai; |
181 int i; | |
182 for (i = 0; i < 4; i++) { | |
183 memset(&ai, 0, sizeof(ai)); | |
184 ai.type = DVD_INVALIDATE_AGID; | |
185 ai.lsa.agid = i; | |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
186 DVDAuth(dvd, &ai); |
492 | 187 } |
4337 | 188 #endif |
492 | 189 } |
190 | |
191 | |
546 | 192 int dvd_import_key ( unsigned char *hexkey ) |
193 { | |
194 unsigned char *t=key_title; | |
195 int digit=4,len; | |
3700 | 196 memset(key_title,0,sizeof(key_title)); |
546 | 197 // printf("DVD key: %s\n",hexkey); |
198 for (len=0;len<10;len++) { | |
199 // printf("-> %c\n",*hexkey); | |
200 if (!*hexkey) return 1; | |
201 if (*hexkey>='A'&&*hexkey<='F') *t|=(*hexkey-'A'+10)<<digit; | |
202 else if (*hexkey>='0'&&*hexkey<='9') *t|=(*hexkey-'0')<<digit; | |
203 else return 1; | |
204 if (digit) digit=0; else { | |
205 digit=4; | |
206 t++; | |
207 } | |
208 hexkey++; | |
209 } | |
210 if (*hexkey) return 1; | |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
211 printf("DVD: DVD key (requested): %02X%02X%02X%02X%02X\n",key_title[0],key_title[1],key_title[2],key_title[3],key_title[4]); |
546 | 212 descrambling=1; |
213 return 0; | |
214 } | |
215 | |
492 | 216 |
559 | 217 |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
218 int dvd_auth ( char *dev , char *filename ) |
492 | 219 { |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
220 DVDHandle dvd; /* DVD device handle */ |
492 | 221 |
4093
d197584460dc
relatiev path to libcss.so - patch by Jim Radford <radford@robotics.caltech.edu>
arpi
parents:
3975
diff
changeset
|
222 if (!css_so) css_so=strdup("libcss.so"); |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
223 printf("DVD: opening libcss.so as %s ...\n",css_so); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
224 dlid=dlopen(css_so,RTLD_NOW); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
225 if (!dlid) { |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
226 printf("DVD: dlopen: %s\n",dlerror()); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
227 return 1; |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
228 } printf("DVD: dlopen OK!\n"); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
229 |
5872 | 230 #ifdef __OpenBSD__ |
231 #define CSS_DLSYM(v,s) if (!(v=dlsym(dlid,"_" s))) {\ | |
232 fprintf(stderr,"DVD: %s\n Hint: use libcss version 0.1!\n",dlerror());\ | |
233 return 1; } | |
234 #else | |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
235 #define CSS_DLSYM(v,s) if (!(v=dlsym(dlid,s))) {\ |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
236 fprintf(stderr,"DVD: %s\n Hint: use libcss version 0.1!\n",dlerror());\ |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
237 return 1; } |
5872 | 238 #endif |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
239 |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
240 CSS_DLSYM(dl_CSSisEncrypted,"CSSisEncrypted"); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
241 CSS_DLSYM(dl_CSSAuthDisc,"CSSAuthDisc"); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
242 CSS_DLSYM(dl_CSSAuthTitle,"CSSAuthTitle"); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
243 CSS_DLSYM(dl_CSSGetASF,"CSSGetASF"); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
244 CSS_DLSYM(dl_CSSDecryptTitleKey,"CSSDecryptTitleKey"); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
245 CSS_DLSYM(dl_CSSDescramble,"CSSDescramble"); |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
246 |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
247 #undef CSS_DLSYM |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
248 |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
249 if ((dvd=DVDOpenDevice(dev)) == DVDOpenFailed) { |
1510
9ffe6c1a33b9
In case the open on the dvd device fails, print some hints based on errno
jkeil
parents:
1177
diff
changeset
|
250 fprintf(stderr,"DVD: cannot open DVD device \"%s\": %s.\n", |
9ffe6c1a33b9
In case the open on the dvd device fails, print some hints based on errno
jkeil
parents:
1177
diff
changeset
|
251 dev, strerror(errno)); |
492 | 252 return 1; |
253 } | |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
254 |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
255 if (!(*dl_CSSisEncrypted)(dvd)) { |
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
256 printf("DVD: DVD is unencrypted! Skipping authentication!\n(note: you should not use -dvd switch for unencrypted discs!)\n"); |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
257 DVDCloseDevice(dvd); |
559 | 258 return 0; |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
259 } else printf("DVD: DVD is encrypted, issuing authentication ...\n"); |
492 | 260 /* reset AGIDs */ |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
261 reset_agids(dvd); |
492 | 262 /* authenticate disc */ |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
263 if ((*dl_CSSAuthDisc)(dvd,key_disc)) { |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
264 fprintf(stderr,"DVD: CSSDVDAuthDisc() failed.\n"); |
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
265 DVDCloseDevice(dvd); |
492 | 266 return 1; |
267 } | |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
268 if (CSSDVDAuthTitlePath(dvd,key_title,filename)) { |
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
269 fprintf(stderr,"DVD: CSSDVDAuthTitle() failed.\n"); |
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
270 DVDCloseDevice(dvd); |
492 | 271 return 1; |
272 } | |
273 | |
274 /* decrypting title */ | |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
275 if ((*dl_CSSDecryptTitleKey)(key_title, key_disc) < 0) { |
492 | 276 fprintf(stderr,"DVD: CSSDecryptTitleKey() failed.\n"); |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
277 DVDCloseDevice(dvd); |
492 | 278 return 1; |
279 } | |
280 | |
1042
b333271f4e7c
Solaris 8 DVD support and other fixes by Juergen Keil <jk@tools.de>
arpi_esp
parents:
1018
diff
changeset
|
281 DVDCloseDevice(dvd); |
3975
04b2227ab75a
Return of the 'Old-style-DVD-support', with dynamic loading (using libdl) so
lgb
parents:
3700
diff
changeset
|
282 printf("DVD: DVD title key is: %02X%02X%02X%02X%02X\n",key_title[0],key_title[1],key_title[2],key_title[3],key_title[4]); |
546 | 283 descrambling=1; |
492 | 284 return 0; |
285 } | |
286 | |
287 | |
288 #endif |